Cod sursa(job #2527015)

Utilizator filicriFilip Crisan filicri Data 19 ianuarie 2020 14:34:06
Problema Energii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <fstream>
#include <limits.h>
using namespace std;
ifstream f("energii.in");
ofstream g("energii.out");

int G, W;
long long sum, res[5004];
struct s {
    long long e, c;
} v[1004];

long long solve(int i) {
    if(i==G)
        return min(res[W-v[i].e]+v[i].c, res[W]);
    for(int j=W;j>=1;j--)
        if(v[i].e<j && res[j-v[i].e]!=LLONG_MAX)
            res[j]=min(res[j-v[i].e]+v[i].c, res[j]);
        else if(v[i].e>=j)
            res[j]=min(res[j], v[i].c);
    solve(i+1);
}

int main() {
    f>>G>>W;
    for(int i=1;i<=G;i++) {
        f>>v[i].e>>v[i].c;
        sum+=v[i].e;
    }
    if(sum<W)
        g<<-1;
    else {
        for(int i=1;i<=W;i++)
            res[i]=LLONG_MAX;
        g<<solve(1);
    }


    f.close();
    g.close();
    return 0;
}