Cod sursa(job #1561417)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 4 ianuarie 2016 01:20:47
Problema Zebughil Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.63 kb
#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;
}