Cod sursa(job #561638)

Utilizator SpiderManSimoiu Robert SpiderMan Data 20 martie 2011 22:16:55
Problema Zebughil Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
# include <cstdio>
# include <cstring>

const char *FIN = "zebughil.in", *FOU = "zebughil.out" ;
const int MAX = 18 ;

int dp[1 << MAX], z[MAX] ;
int N, G ;

inline int max ( int a, int b ) {
    return ( a > b ? a : b ) ;
}

int solve ( void ) {
    dp[0] = G, memset ( &dp[1], -1, sizeof ( dp ) ) ;
    for ( int i = 1; i <= N; ++i ) {
        for ( int j = 1; j < 1 << N; ++j ) {
            dp[j] == -1 ? 0 : dp[j] = G ;
            for ( int k = 0; 1 << k <= j; ++k ) {
                if ( j & 1 << k ) {
                    dp[j] = max ( dp[j], dp[j & ~ ( 1 << k )] - z[k + 1] ) ;
                }
            }
        }
        if ( dp[( 1 << N ) - 1] + 1 > 0 ) return i ;
    }
    return -1 ;
}

int main ( void ) {
    freopen ( FIN, "r", stdin ) ;
    freopen ( FOU, "w", stdout ) ;

    for ( int T = 1; T < 4; ++T ) {
        scanf ( "%d %d", &N, &G ) ;
        for ( int i = 1; i <= N; ++i )
            scanf ( "%d", z + i ) ;
        printf ( "%d\n", solve () ) ;
    }
}