Cod sursa(job #517533)

Utilizator cmiNCosmin Poieana cmiN Data 29 decembrie 2010 00:48:18
Problema Energii Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>
#define inf 0x7FffFFff
#define emax 5120
#define gmax 1024

using namespace std;
struct {
    int e, c;
} gen[gmax];
unsigned long sol[emax][gmax];

void preprocess(int g, int w)
{
    int i;
    for (i = 0; i <= w; i++) {
        sol[i][0] = inf;
    }
    for (i = 0; i <= g; i++) {
        sol[0][g] = inf;
    }
}

void solve(int g, int w)
{
    int i, j;
    for (i = 1; i <= w; i++) {
        for (j = 1; j <= g; j++) {
            sol[i][j] = sol[i][j - 1];
            if (gen[j].e >= i && gen[j].c < sol[i][j]) {
                sol[i][j] = gen[j].c;
            } else if (gen[j].e < i && gen[j].c + sol[i - gen[j].e][j - 1] < sol[i][j]) {
                sol[i][j] = gen[j].c + sol[i - gen[j].e][j - 1];
            }
        }
    }
}

int main()
{
    ifstream fin("energii.in");
    ofstream fout("energii.out");
    int g, w;
    fin >> g >> w;
    for (int i = 1; i <= g; i++) {
        fin >> gen[i].e >> gen[i].c;
    }
    preprocess(g, w);
    solve(g, w);
    if (sol[w][g] == inf) {
        fout << -1;
    } else {
        fout << sol[w][g];
    }
    fin.close();
    fout.close();
}