Cod sursa(job #1060230)

Utilizator mucenic_b101Bogdan Mucenic mucenic_b101 Data 17 decembrie 2013 19:18:27
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <cstdio>

int l1[10001], l2[10001], w[5001], p[5001];

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

int main () {
    FILE *f, *g;
    f = fopen( "rucsac.in", "r" );
    g = fopen( "rucsac.out", "w" );

    int n, G;

    fscanf( f, "%d%d", &n, &G );

    for( int i = 1 ; i <= n ; ++i )
        fscanf( f, "%d%d", &w[i], &p[i] );

    for( int j = 1 ; j <= G ; ++j )
        l1[j] = w[0] >= j ? p[0] : 0;

    for( int i = 1 ; i <= n ; ++i ) {
        for( int j = 1 ; j <= G ; ++j )
            if( j < w[i] )
                l2[j] = l1[j];
            else
                l2[j] = max( l1[j], l1[j - w[i]] + p[i] );
        for( int j = 1 ; j <= G ; ++j )
            l1[j] = l2[j];
    }

    fprintf( g, "%d\n", l1[G] );

    fclose( f );
    fclose( g );

    return 0;

}