Cod sursa(job #491538)

Utilizator SpiderManSimoiu Robert SpiderMan Data 11 octombrie 2010 19:07:53
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
# include <cstdio>
# include <cstring>

int G, W, min = 0x3f3f3f3 ;
int best[5000] ;

int main ( void ) {
    freopen ( "energii.in", "r", stdin ) ;

    memset ( best, -1, sizeof ( best ) ) , best[0] = 0 ;
    scanf ( "%d %d", &G, &W ) ;
    for ( int i = 0, a, b ; i < G; ++i ) {
        scanf ( "%d %d", &a, &b ) ;
        for ( int j = W - a; j >= 0; --j ) {
            if ( best[j] != -1 ) {
                if ( j + a < W ) {
                    if ( best[j] + b < best[j + a] || best[j + a] == -1 ) {
                        best[j + a] = best[j] + b ;
                    }
                } else if ( best[j] + b < min ) {
                    min = best[j] + b ;
                }
            }
        }

    }

    freopen ( "energii.out", "w", stdout ) ;
    printf ( "%d", min == 0x3f3f3f3 ? -1 : min ) ;
}