Pagini recente » Cod sursa (job #479657) | Cod sursa (job #2121204) | Cod sursa (job #2454270) | Cod sursa (job #3284451) | Cod sursa (job #216319)
Cod sursa(job #216319)
#include <cstdio>
#include <cstring>
#define Nmax 18
int N,G,t,i;
int Z[Nmax];
int A[1<<Nmax], B[1<<Nmax];
void solve()
{
int full=(1<<N),j,p;
B[0] = G;
A[0] = 1;
for (i=1; i<full; ++i)
{
A[i]=N+1;
B[i]=0;
for (j=1,p=1; j<=N && p<=i; ++j,p<<=1)
{
if ( (i&p) == 0 ) continue;
if (B[i-p] - Z[j] >= 0)
if ( A[i-p]<A[i] || (A[i-p]==A[i] && B[i-p]-Z[j]>B[i]) )
{
A[i] = A[i-p];
B[i] = B[i-p] - Z[j];
}
else;
else if (A[i-p] + 1 < A[i] || (A[i-p]+1==A[i] && G-Z[j]>B[i]) )
{
A[i] = A[i-p] + 1;
B[i] = G - Z[j];
}
}
}
printf("%d\n",A[full-1]);
}
int main()
{
freopen("zebughil.in","r",stdin);
freopen("zebughil.out","w",stdout);
for (t=0;t<3;++t)
{
scanf("%d %d",&N,&G);
for (i=1; i<=N; ++i)
scanf("%d",&Z[i]);
solve();
}
fclose(stdout);
return 0;
}