Cod sursa(job #2047447)

Utilizator PredaBossPreda Andrei PredaBoss Data 24 octombrie 2017 20:52:50
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <bits/stdc++.h>

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