Cod sursa(job #879626)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("energii.in");
ofstream out("energii.out");
const int N=1002;
const int MAX=10022005;
int n,w,e[N],c[N],maxim,p[MAX],minim=MAX;
void citire()
{
in>>n>>w;
for(int i=1;i<=n;i++)
{
in>>e[i]>>c[i];
maxim+=e[i];
}
}
void init()
{
for(int i=1;i<=maxim+1;i++)
p[i]=MAX;
}
int main()
{
int i;
citire();
init();
for( i=1;i<=n;i++)
{
for(int j=maxim;j>0;j--)
if(p[j]!=0)
if(p[j]+c[i]<p[j+e[i]])
p[j+e[i]]=c[i]+p[j];
if( p[e[i]]>c[i])
p[e[i]]=c[i];
}
for(i=1;i<=maxim;i++)
if(p[i]!=0 && i>=w)
{
if(p[i]<minim)
minim=p[i];
}
if(minim==MAX)
out<<-1;
else
out<<minim;
return 0;
}