Pagini recente » Cod sursa (job #1335038) | Cod sursa (job #2970517) | Cod sursa (job #1591076) | Cod sursa (job #1243001) | Cod sursa (job #480261)
Cod sursa(job #480261)
#include <stdio.h>
#define Nmax 18
int din[1<<Nmax],mcam[1<<Nmax];
int v[Nmax];
int n,G;
inline int Maxim(int x,int y){ return x>y ? x:y; }
int main(){
int i,j,k,t;
freopen("zebughil.in","r",stdin);
freopen("zebughil.out","w",stdout);
for(t=1;t<=3;++t){
scanf("%d%d",&n,&G);
for(i=1;i<=n;++i) scanf("%d",&v[i]);
for(i=0;i<(1<<n);++i) for(j=1;j<=n;++j) din[i]=-1,mcam[i]=n+1;
din[0]=G; mcam[0]=1;
for(i=0;i<(1<<n);++i)
for(k=0;k<n;++k)
if( !(i&(1<<k)) )
if( din[i] >= v[k+1] )
if( mcam[i] < mcam[i|(1<<k)] ||
(mcam[i] == mcam[i|(1<<k)] && din[i]-v[k+1]>din[i|(1<<k)])){
mcam[i|(1<<k)]=mcam[i];
din[i|(1<<k)]=din[i] - v[k+1];
}else;
else
if( mcam[i]+1 < mcam[i|(1<<k)]||
(mcam[i]+1 == mcam[i|(1<<k)] && G-v[k+1]>din[i|(1<<k)]) ){
mcam[i|(1<<k)]=mcam[i]+1;
din[i|(1<<k)]=G - v[k+1];
}
printf("%d\n",mcam[(1<<n)-1]);
}
fclose(stdin); fclose(stdout);
return 0;
}