Pagini recente » Cod sursa (job #2798749) | Cod sursa (job #1282732) | Cod sursa (job #522924) | Cod sursa (job #174441) | Cod sursa (job #396916)
Cod sursa(job #396916)
#include<stdio.h>
#include<string.h>
#define put (1<<17)+10
#define maxim(a,b) (a>b ? a : b)
int n,g,v[21];
char d[put][18],viz[put][18];
int main ()
{
int con,i,j,k,lim,add;
freopen("zebughil.in","r",stdin);
freopen("zebughil.out","w",stdout);
con=3;
for(;con;con--)
{
scanf("%d%d",&n,&g);
for(i=1;i<=n;i++)
{
scanf("%d",&v[i]);
d[(1<<(i-1))][1]=g-v[i];
viz[(1<<(i-1))][1]=1;
}
lim=(1<<n)-1;
for(i=1;i<=lim;i++)
for(j=1;j<=n;j++)
if(viz[i][j])
for(k=1;k<=n;k++)
{
add=(1<<(k-1));
if(i&add)
continue;
if(d[i][j]-v[k]>=0)
{
if(!viz[i+add][j])
d[i+add][j]=d[i][j]-v[k];
else
d[i+add][j]=maxim(d[i+add][j],d[i][j]-v[k]);
viz[i+add][j]=1;
} //if
else
{
if(!viz[i+add][j+1])
d[i+add][j+1]=g-v[k];
else
d[i+add][j+1]=maxim(d[i+add][j+1],g-v[k]);
viz[i+add][j+1]=1;
}
}
for(i=1;i<=n;i++)
if(viz[lim][i])
break;
printf("%d\n",i);
memset(viz,0,sizeof(viz));
memset(d,0,sizeof(d));
}
return 0;
}