Pagini recente » Cod sursa (job #1161045) | Cod sursa (job #1555629) | Cod sursa (job #3230788) | Cod sursa (job #860778) | Cod sursa (job #70268)
Cod sursa(job #70268)
#include<stdio.h>
#define Nmax 17
#define inf 2000000003
int A[Nmax],cam[(1<<Nmax)+5],liber[(1<<Nmax)+5];
int main()
{
FILE *fin=fopen("zebughil.in","r"),
*fout=fopen("zebughil.out","w");
int N,G,T=3,maxim,confnou,conf,i;
while(T--)
{
fscanf(fin,"%d%d",&N,&G);
maxim=-1;
for(i=0;i<N;i++)
{
fscanf(fin,"%d",&A[i]);
if(A[i]>maxim) maxim=A[i];
}
if(maxim>G) fprintf(fout,"0\n");
else
{
cam[0]=liber[0]=0;
for(conf=1;conf< (1<<N); conf++)
{
cam[conf]=inf;
liber[conf]=0;
for(i=0;i<N;i++)
if( (conf & (1<<i)) )
{
confnou=conf-(1<<i);
if(liber[confnou] >= A[i])
{
if(cam[confnou] < cam[conf] ||
(cam[confnou] == cam[conf] && liber[conf]<liber[confnou]-A[i]) )
{
cam[conf]=cam[confnou];
liber[conf]=liber[confnou]-A[i];
}
}
else
if(cam[confnou]+1 < cam[conf] ||
(cam[confnou]+1 == cam[conf] && liber[conf]<G-A[i]) )
{
liber[conf]=G-A[i];
cam[conf]=cam[confnou]+1;
}
}
}
fprintf(fout,"%d\n",cam[conf-1]);
}
}
fclose(fin);
fclose(fout);
return 0;
}