Pagini recente » Cod sursa (job #2086298) | Cod sursa (job #370323) | Cod sursa (job #1072177) | Cod sursa (job #213808) | Cod sursa (job #1724222)
#include <cstdio>
#include <algorithm>
using namespace std;
const int N=20;
const int G=(1<<20);
int v[N];
struct bloc
{
int sum,ind;
} d[G];
bool cmp(const bloc &a, const bloc &b)
{
return a.sum<b.sum;
}
int main()
{
freopen("zebughil.in","r",stdin);
freopen("zebughil.out","w",stdout);
int n,g,i,j,x,cnt,nr,poz;
long long s;
for(int k=1;k<=3;k++)
{
cnt=0, poz=0;
scanf("%d%d",&n,&g);
for(i=1;i<=n;i++)
{
scanf("%d",&x);
if(x) cnt++, v[cnt]=x;
}
n=cnt;
nr=(1<<n)-1;
for(i=1;i<=nr;i++)
{
s=0LL;
for(j=0;j<=20;j++)
if((1<<j)&i)
s+=v[j+1];
if(s<=1LL*g)
{
poz++;
d[poz].sum=s;
d[poz].ind=i;
}
}
sort(&d[1],&d[poz+1],cmp);
int mask=0,truck=0;
for(i=poz;i>=1;i--)
{
if(mask==nr) break;
if( !(d[i].ind & mask) )
{
mask|=d[i].ind;
truck++;
}
}
printf("%d\n",truck);
}
return 0;
}