Cod sursa(job #1100022)

Utilizator AnduRazvanMindrescu Andu AnduRazvan Data 6 februarie 2014 15:23:50
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 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;
}
*/
#include <fstream>

using namespace std;
ifstream fin("energii.in");
ofstream fout("energii.out");
int c[1001][5001];
int main()
{int i,j,G,w,e[1001],c1[1001],s1=0;
 fin>>G>>w;
 for(i=1;i<=G;i++)
 {fin>>e[i]>>c1[i];
 s1=s1+e[i];}
 if (s1<w) fout<<-1;
 else
 {for(i=0;i<=w;i++)
    c[0][i]=20000000;

  for(i=0;i<=G;i++)
  c[i][0]=20000000;

for(i=1;i<=G;i++)
 for(j=1;j<=w;j++)
  if (e[i]>=j) c[i][j]=min(c1[i],c[i-1][j]);
    else c[i][j]=min(c1[i]+c[i-1][j-e[i]],c[i-1][j]);

 fout<<c[G][w];
 }








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