Pagini recente » Cod sursa (job #180683) | Cod sursa (job #2651642) | Cod sursa (job #2096733) | Cod sursa (job #2782782) | Cod sursa (job #602383)
Cod sursa(job #602383)
#include<stdio.h>
#define maxN 19
FILE*f=fopen("zebughil.in","r");
FILE*g=fopen("zebughil.out","w");
int n,G,i,A[maxN],bst[(1<<(maxN-1))][maxN],t,j,ii;
inline void citire () {
fscanf(f,"%d %d",&n,&G);
for ( i = 0 ; i < n ; ++i ){
fscanf(f,"%d",&A[i]);
}
}
inline int max ( int a , int b ){
if ( a > b )
return a;
return b;
}
inline void solve () {
for ( i = 0 ; i < (1<<n) ; ++i ){
for ( j = 1 ; j <= n ; ++j ){
bst[i][j] = -1;
}
}
bst[0][1] = G;
for ( i = 0 ; i < (1<<n) ; ++i ){
for ( j = 1 ; j <= n ; ++j ){
if ( bst[i][j] == -1 ) continue ;
for ( ii = 0 ; ii < n ; ++ii ){
if ( i & (1 << ii) ) continue ;
if ( A[ii] > bst[i][j] ){
bst[i|(1<<ii)][j+1] = max( bst[i|(1<<ii)][j+1] , G - A[ii] );
}
else{
bst[i|(1<<ii)][j] = max( bst[i|(1<<ii)][j], bst[i][j] - A[ii] );
}
}
}
}
for ( j = 1 ; j <= n ; ++j ){
if ( bst[(1<<n)-1][j] != -1 ){
fprintf(g,"%d\n",j);
break;
}
}
}
int main () {
for ( t = 1 ; t <= 3 ; ++t ){
citire();
solve();
}
fclose(f);
fclose(g);
return 0;
}