Cod sursa(job #1746412)

Utilizator Dan_RadulescuRadulescu Dan Dan_Radulescu Data 23 august 2016 11:25:53
Problema Energii Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fin("energii.in");
ofstream fout("energii.out");
int n,w,i,j,maxs,sol,c[50000001],v[50000001],val,Max,Min=100000001;
struct data{
    int e,c;
}x[1001];
int main(){
   fin>>n>>w;
   for (i=1;i<=n;i++)
     fin>>x[i].e>>x[i].c;
   fin.close();
   maxs=0;v[0]=1;c[0]=0;
   for (i=1;i<=n;i++){
      val=maxs;Max=0;
      while(val>=0){
         if (v[val]==1)
           if (v[val+x[i].e]==0){
              v[val+x[i].e]=1;
              c[val+x[i].e]=c[val]+x[i].c;
              if (Max<val+x[i].e) Max=val+x[i].e;
              if (val+x[i].e>=w){
                  if (Min>c[val+x[i].e]) Min=c[val+x[i].e];
              }
           }
              else
                    if (c[val+x[i].e]>c[val]+x[i].c) {
                            c[val+x[i].e]=c[val]+x[i].c;
                            if (val+x[i].e>=w && Min>c[val+x[i].e]) Min=c[val+x[i].e];
                    }
         val--;
      }
      if (maxs<Max) maxs=Max;
   }
   if (Min==100000001) fout<<"-1";
     else
        fout<<Min;
   fout.close();
   return 0;
}