Cod sursa(job #1099867)

Utilizator AnduRazvanMindrescu Andu AnduRazvan Data 6 februarie 2014 13:21:22
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <fstream>

using namespace std;
ifstream fin("energii.in");
ofstream fout("energii.out");
int main()
{ int mini=0,valmax=0,x=0,smax=0,i,G,w,s1[100000]={0},s[100000]={0},j,alege[100000]={0},e[1001],c[1001];
fin>>G>>w;
for(i=1;i<=G;i++)
{fin>>e[i]>>c[i];
smax=smax+e[i];}
if (smax<w) fout<<"-1";
else
{ //valmax=0;
    for(i=1;i<=G;i++)
  { x=e[i];
    s1[x]=1;
    //valmax=valmax+x;
    for(j=1;j<=smax;j++)
     {if (s[j]==1) {s1[j+x]=1;}
     for(j=1;j<=smax;j++)
     { if (s1[j]==1&&s[j]==0)
          { s[j]=1;
          alege[j]=alege[j-x]+c[i];
          s1[j]=0;
          }
         else if (s1[j]==1&&s[j]==1)
         {alege[j]=min(alege[j],alege[j-x]+c[i]);
         s1[j]=0;

         }
     }
  }

  }
  mini=2000000000;
for (i=w;i<=smax;i++)
if (s[i]==1&&mini>alege[i]) mini=alege[i];

}

fout<<mini;


    fin.close();
    fout.close();
    return 0;
}