Cod sursa(job #879630)
#include <fstream>
using namespace std;
ifstream fin("energii.in");
#define NMAX 1005
#define NMAX2 11000000
ofstream fout("energii.out");
int n,W,profit[NMAX2],sum,sum2;
struct data{
int power,cost;
};
data v[NMAX];
void read()
{
int i;
fin>>n>>W;
for(i=1;i<=n;i++)
{
fin>>v[i].power>>v[i].cost;
sum+=v[i].cost;
sum2+=v[i].power;
}
}
int main()
{
read();
if(sum2<W)
{
fout<<-1;
return 0;
}
int i,j,poz=sum;
for(i=1;i<=n;i++)
{
for(j=poz;j;j--)
{
if(profit[j] && profit[j]+v[i].power > profit[j+v[i].cost])
{
profit[j+v[i].cost] = profit[j] + v[i].power;
if(profit[j+v[i].cost] >= W)
if(poz==0 || poz>j+v[i].cost)
poz= j+v[i].cost;
}
}
if(v[i].power > profit[v[i].cost])
{
profit[v[i].cost] = v[i].power;
if(profit[v[i].cost] >= W)
if(poz==0 || poz>v[i].cost)
poz=v[i].cost;
}
}
for(i=1;i<=NMAX2;i++)
{
//fout<<profit[i]<<endl;
//fout<<W;
if(profit[i]>=W)
{
fout<<i;
return 0;
}
}
}