Cod sursa(job #1020783)

Utilizator nytr0gennytr0gen nytr0gen Data 2 noiembrie 2013 17:14:12
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <cstdio>

using namespace std;

const int Nmax = 1005;
const int Gmax = 5005;
const int oo   = 10005;

inline int min(int x, int y) {
    if (x > y)
        return y;
    return x;
}

int main() {
    int G, W, i, cw;
    int D[Nmax][Gmax];
    int EG[Nmax], CG[Nmax];

    freopen("energii.in", "r", stdin);
    freopen("energii.out", "r", stdout);

    scanf("%d%d", &G, &W);
    for (i = 1; i <= G; ++i)
        scanf("%d%d", &EG[i], &CG[i]);

    for (i = 0; i <= G; ++i)
        for (cw = 0; cw <= W; ++cw)
            D[i][cw] = oo;

    for (i = 1; i <= G; ++i) {
        for (cw = 1; cw <= W; ++cw) {
            D[i][cw] = D[i-1][cw];

            if (cw == EG[i]) {
                D[i][cw] = min(D[i][cw], CG[i]);
            }

            if (cw > EG[i]) {
                if (D[i-1][cw - EG[i]] < oo)
                    D[i][cw] = min(D[i][cw], D[i-1][cw - EG[i]] + CG[i]);
            }
        }
    }

    if (D[G][W] == oo)
        printf("%d", -1);
    else
        printf("%d", D[G][W]);

    return 0;
}