Pagini recente » Cod sursa (job #2410970) | Cod sursa (job #1122858) | Cod sursa (job #2835865) | Cod sursa (job #2250224) | Cod sursa (job #1561417)
#include <cstdio>
#include <algorithm>
#include <cstring>
const int DIM = 17;
const int INF = 0x3f3f3f3f;
using namespace std;
int V[DIM + 1], D[1 << DIM], N, G;
long long sum;
int main () {
freopen( "zebughil.in" ,"r", stdin );
freopen( "zebughil.out","w", stdout );
for( int t = 1; t <= 3; t ++ ) {
scanf( "%d %d", &N, &G );
for( int i = 0; i < N; i ++ )
scanf( "%d", &V[i] );
for( int i = 1; i < (1 << N); i ++ ) {
sum = 0;
for( int j = 0; j < N; j ++ )
if( (i >> j) & 1 )
sum += V[j];
if( sum <= G )
D[i] = 1;
else { /* _________________________________________________________________________________________________ */
D[i] = N; /* V */
for( int j = (i - 1) & i; j; j = (j - 1) & i ) /* aceasta formula nu a fost dedusa de mine ci preluata de la un alt programator */
if( D[j] + D[i - j] < D[i] ) /* priceput din aceasta tara, modul in care a ajuns ea la mine in program se da- */
D[i] = D[j] + D[i - j]; /* toreaza faptului ca m-am saturat sa salvez bitii de 1 din configuratia binara */
} /* a lui i intr-un vector auxiliar pentru ca mai apoi sa construiesc submultimi */
}
printf( "%d\n", D[(1 << N) - 1] );
}
return 0;
}