Cod sursa(job #2124513)

Utilizator maria15Maria Dinca maria15 Data 7 februarie 2018 12:04:15
Problema Energii Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>
#define e first
#define c second

using namespace std;

int n, i, g, w, s, d[10000*10000+1], j, cost = 10000*10000+1, maxim;
pair<int, int> gen[1002];
char ok;
ifstream fin("energii.in");
ofstream fout("energii.out");

int main(){
    fin>>g>>w;
    for(i=1;i<=g;i++){
        fin>>gen[i].e>>gen[i].c;
        if(maxim < gen[i].e)
            maxim = gen[i].e;
    }

    for(i=1;i<=g;i++)
        for(j=maxim;j>=0;j--)
            if((d[j]>0 || j == 0) && (d[j+gen[i].e] > d[j] + gen[i].c || d[j+gen[i].e] == 0)){
                d[j+gen[i].e] = d[j] + gen[i].c;
                if(j+gen[i].e >= w && d[j+gen[i].e] < cost)
                    cost = d[j+gen[i].e], ok = 1;
                if(maxim < j+gen[i].e)
                    maxim = j+gen[i].e;
            }
    if(ok)
        fout<<cost;
    else
        fout<<-1;
    return 0;
}