Cod sursa(job #1324621)

Utilizator stefantrettTrett Stefan stefantrett Data 22 ianuarie 2015 16:27:48
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
// Problema rucsacului, dinamica O(N*G) timp, O(N*G) memorie

#include <cstdio>
#include <algorithm>

using namespace std;

#define MAXN 5010
#define MAXG 10010

int N, G, Pmax;
int W[MAXN], P[MAXN];
int D[MAXG];
int main()
{
    freopen("rucsac.in", "r", stdin);
    freopen("rucsac.out", "w", stdout);

    scanf("%d%d", &N, &G);
    for(int i = 1; i <= N; ++i)
        scanf("%d%d", &W[i], &P[i]);


    for(int i = 1; i <= N; ++i)
        for(int cw = G-W[i]; cw >= 0; --cw)
            if(W[i] <= cw + W[i])
                D[cw + W[i]] = max(D[cw + W[i]], D[cw] + P[i]);

    Pmax = D[G];

    printf("%d\n", Pmax);

    return 0;
}