Cod sursa(job #944457)

Utilizator matei_cChristescu Matei matei_c Data 28 aprilie 2013 16:50:19
Problema Zebughil Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<fstream>
using namespace std ;

ifstream fin("zebughil.in");
ofstream fout("zebughil.out");

#define maxn 17
#define maxstari ( 1 << 17 )

int din[maxstari] ;

int G, n, a[maxn] ;

int tst = 3 ;

void citire()
{
    fin >> n >> G ;

    for(int i = 0; i < n; ++i )
        fin >> a[i] ;
}

void init_dinamica()
{
    int limstari = ( 1 << n ) ;

    for(int i = 0; i < limstari; ++i )
        din[i] = -1 ;

    din[0] = G ;
}

void rezolva_dinamica()
{
    int limstari = ( 1 << n ) ;
    int sol ;

    for(int i = 1; i <= n; ++i )
    {
        for(int j = 0; j < limstari; ++j )
        {
            if( din[j] != -1 )
                din[j] = G ;

            for(int k = 0; k < n; ++k )
                if( j & ( 1 << k ) && din[ j - ( 1 << k ) ] - a[k] > din[j] )
                    din[j] = din[ j - ( 1 << k ) ] - a[k] ;
        }

        if( din[ ( 1 << n ) - 1 ] >= 0 )
        {
            sol = i ;
            break ;
        }
    }

    fout << sol << "\n" ;
}

int main()
{
    while( tst-- )
    {
        citire() ;

        init_dinamica() ;

        rezolva_dinamica() ;
    }

    return 0 ;
}