Cod sursa(job #1020792)

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

using namespace std;

const int Nmax = 1005;
const int Gmax = 505;
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, l;
    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 < 2; ++i)
        for (cw = 1; cw <= W; ++cw)
            D[i][cw] = oo;

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

            if (cw >= EG[i]) {
                if (D[l][cw - EG[i]] < oo)
                    D[1-l][cw] = min(D[1-l][cw], D[l][cw - EG[i]] + CG[i]);
            }
            //printf("%d ", D[1-l][cw]);
        }
        //printf("\n");
    }

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

    return 0;
}