Cod sursa(job #2047637)

Utilizator PredaBossPreda Andrei PredaBoss Data 25 octombrie 2017 08:26:11
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("energii.in");
ofstream fout("energii.out");
int a[5005][2005];
struct energie
{
    int c,p;
};
energie v[1005];
int main()
{int g,w,i,j,k,t,s,mn1,mn2;
fin>>g>>w;
t=INT_MAX;
s=0;
mn1=INT_MIN;
mn2=INT_MIN;
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{
        for (i=1;i<=g;i++){
            for(j=1;j<=s;j++){
                a[i][j]=a[i-1][j];
                if(v[i].c<=w){
                    if(a[i-1][j]!=0 && (j==v[i].c || a[i][j-v[i].c]>0)){
                        a[i][j]=min(a[i-1][j],a[i-1][j-v[i].c]+v[i].p);
                    }
                    else{
                            if(a[i-1][j-v[i].c]>0){
                        a[i][j]=a[i-1][j-v[i].c]+v[i].p;
                            }
                            else{
                                if(j==v[i].c){
                                    a[i][j]=v[i].p;
                                }
                            }
                    }
                }
            }
        }


    for(i=w;i<=s;i++){
        if(a[g][i]<t && a[g][i]>0){
            t=a[g][i];
        }
    }
    fout<<t;
    }


    return 0;
}