Cod sursa(job #1174581)

Utilizator mucenic_b101Bogdan Mucenic mucenic_b101 Data 23 aprilie 2014 14:52:14
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <cstdio>
#define MAXN 5000
#define MAXG 10000

struct obj{
    int w, p;
};

obj v[MAXN];

int profit[MAXG+1];

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

    int n, G, max;

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

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

    for( int i = 1 ; i <= G ; ++i )
        profit[i] = -1;

    for( int i = 0 ; i < n ; ++i )
        for( int j = G ; j >= 0 ; --j )
            if( profit[j] != -1 && j + v[i].w <= G && profit[j + v[i].w] < profit[j] + v[i].p )
                profit[j + v[i].w] = profit[j] + v[i].p;


    max = -1;
    for( int i = 0 ; i <= G ; ++i )
        if( profit[i] > max )
            max = profit[i];

    fprintf( g, "%d\n", max );

    fclose( f );
    fclose( g );
    return 0;
}