Cod sursa(job #213914)
#include <fstream>
#define inf 60000000LL
#define MAX 16003
using namespace std;
ifstream fin ("energii.in");
ofstream fout ("energii.out");
int g,w,cost[MAX],cant[MAX];
int viz[MAX],sum[MAX];
int minim=inf;
void citire()
{
fin>>g>>w;
for (int i=0;i<g;i++)
fin>>cant[i]>>cost[i];
}
int min (int a,int b)
{
return a>b?b:a;
}
void energ()
{
for (int i=0;i<=MAX;i++)
sum[i]=inf;
viz[0]=1;
sum[0]=0;
for (int i=0;i<g;i++)
for (int j=w;j>=0;j--)
if (viz[j]==1)
{
sum[j+cant[i]]=min(sum[j+cant[i]],sum[j]+cost[i]);
viz[j+cant[i]]=1;
if (j+cant[i]>=w)
minim=min(minim,sum[j+cant[i]]);
}
if (minim==inf)
fout<<"-1\n";
else
fout<<minim<<"\n";
}
int main ()
{
citire();
energ();
return 0;
}