Cod sursa(job #2049023)

Utilizator PredaBossPreda Andrei PredaBoss Data 26 octombrie 2017 19:39:55
Problema Energii Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("energii.in");
ofstream fout("energii.out");
int a[1005][10005];
struct energie
{
    int c,p;
};
energie v[1005];
int main()
{int g,w,i,j,k,t,s;
fin>>g>>w;
t=INT_MAX;
s=0;
for(i=1;i<=g;i++){
    fin>>v[i].c>>v[i].p;
    if (v[i].c>=w && v[i].p<t){
        t=v[i].p;
    }
    s=s+v[i].c;}
    if(s<w){
        fout<<-1;
    }
    else{
            s=0;
            for(i=1;i<=g;i++){
                if(v[i].c<w){
                    s=s+v[i].c;}}
    if(s>=w){
int f=1;
k=1;
while(f<=g){
    for(j=1;j<=s;j++){
            a[k][j]=a[3-k][j];
            if(v[f].c<w){
        if(a[3-k][j]==0){
            if(j==v[f].c){
                a[k][j]=v[f].p;
            }
            else{
                if(a[3-k][j-v[f].c]>0){
                    a[k][j]=a[3-k][j-v[f].c]+v[f].p;
                }
            }
        }
        else{
             if(j==v[f].c){
                a[k][j]=min(a[3-k][j],v[f].p);
            }
            else{
                if(a[3-k][j-v[f].c]>0){
                    a[k][j]=min(a[3-k][j],a[3-k][j-v[f].c]+v[f].p);
                }
            }
        }
    }
}
k=3-k;
f++;
}
    for(i=w;i<=s;i++){
        if(a[k][i]<t && a[k][i]>0){
            t=a[k][i];
        }
    }
    }
    fout<<t;
    }
return 0;
}