Cod sursa(job #1334354)

Utilizator bogdanciurezubogdan ciurezu bogdanciurezu Data 4 februarie 2015 11:53:57
Problema Energii Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>
#define nmax 5050

using namespace std;
ifstream f("energii.in");
ofstream g("energii.out");
int nrGen, eNec, cantE[nmax], pret[nmax], PD[1001][nmax];

inline int minim(int x, int y){
    return x < y ? x : y;
}

inline int maxim(int x, int y){
    return x > y ? x : y;
}

int main()
{int i, j, curent = nmax, S = 0;

    f >>nrGen >>eNec;
    for(i = 1; i <= nrGen; ++i){
        f>> cantE[i]>> pret[i];
        S += cantE[i];
    }
    if(S < eNec){ g<< -1<<'\n'; return 0;}
        for(i = 0; i <= nrGen; ++i)
            for(j = 1; j <= eNec; ++j)
            PD[i][j] = nmax;
    PD[0][0] = 0;
    for(i = 1; i <= nrGen; ++i){
        for(j = 0; j <= eNec; ++j){
            PD[i][j] = minim(PD[i - 1][j] , PD[i - 1][maxim(0, j - cantE[i])] + pret[i]);
            if(j == eNec)
                curent = minim(curent, PD[i][j]);
        }
    }
    g << curent<<'\n';

    return 0;
}