Cod sursa(job #1158590)

Utilizator tudi98Cozma Tudor tudi98 Data 28 martie 2014 22:22:48
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <fstream>
#include <climits>
using namespace std;
ifstream f("energii.in");
ofstream g("energii.out");

int best=0,sol,n,W,E[1001],C[1001],i,j;

struct { int e,c; } a[5001],b[5001];

int main(){

    f>>n>>W;
    C[0]=INT_MAX;
    for(i=1;i<=n;i++){
    f>>E[i]>>C[i];
    if(E[i]>=W) best=C[i]>C[best]?best:i;
    }

    for(i=1;i<=n;i++){
        for(j=0;j<=W;j++){
         a[j].c=b[j].c;
         a[j].e=b[j].e;
         if(E[i]<=j) if(b[j].c<b[j-E[i]].c+C[i]){
                        a[j].c=b[j-E[i]].c+C[i];
                        a[j].e=b[j-E[i]].e+E[i];
                     }
        }
        for(j=1;j<=W;j++){ b[j].c=a[j].c;b[j].e=a[j].e; }
    }

    if(a[W].e>=W) sol=C[best]<a[W].c?C[best]:a[W].c;
    else if(best) sol=C[best];
    else sol=-1;

    g<<sol;
}