Pagini recente » Cod sursa (job #601569) | Cod sursa (job #176265) | Cod sursa (job #2604889) | Cod sursa (job #399087) | Cod sursa (job #963772)
Cod sursa(job #963772)
#include<cstdio>
using namespace std;
int i,j,T,N,G,Z[20],DP[(1<<17)+5],Cap[(1<<17)+5],AuxD,AuxC;
int main()
{
freopen("zebughil.in","r",stdin);
freopen("zebughil.out","w",stdout);
for(T=3;T;T--)
{
scanf("%d%d",&N,&G);
for(i=1;i<=N;i++) scanf("%d",&Z[i]);
for(i=1;i<(1<<N);i++) DP[i]=N+1,Cap[i]=0;
for(i=1,j=1;i<(1<<N);i<<=1,j++) DP[i]=1,Cap[i]=Z[j];
for(i=1;i<(1<<N);i++)
for(j=1;j<=N;j++)
if(!(1<<(j-1)&i))
{
if(Z[j]+Cap[i]>G) AuxD=DP[i]+1,AuxC=Z[j];
else AuxD=DP[i],AuxC=Z[j]+Cap[i];
if(AuxD<DP[i+(1<<(j-1))]) DP[i+(1<<(j-1))]=AuxD,Cap[i+(1<<(j-1))]=AuxC;
else if(AuxD==DP[i+(1<<(j-1))]) if(AuxC<Cap[i+(1<<(j-1))]) DP[i+(1<<(j-1))]=AuxD,Cap[i+(1<<(j-1))]=AuxC;
}
printf("%d\n",DP[(1<<N)-1]);
}
return 0;
}