Pagini recente » Cod sursa (job #333811) | Cod sursa (job #3128663) | Cod sursa (job #899440) | Cod sursa (job #215104) | Cod sursa (job #767187)
Cod sursa(job #767187)
#include <fstream>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
ifstream fin ("energii.in");
ofstream fout ("energii.out");
struct energ {
int cost;
int productie;
};
int v[3][20000009];
energ a[1200];
int main()
{
int n,w,i,j,costmin=0,prd=0,dif=10009;
long long costmax=0;
fin>>n>>w;
for (i=1;i<=n;i++)
{
fin>>a[i].productie>>a[i].cost;
costmax=a[i].cost+costmax;
prd+=a[i].productie;
}
if (prd<=w)
{
if (prd==w)
fout<<costmax;
else
fout<<-1;
}
else
{
costmin=costmax+1;
for(i=1;i<=n;i++)
{
for(j=0;j<=costmax;j++)
{
if (j>=a[i].cost)
{
v[1][j]=max(v[0][j],v[0][j-a[i].cost]+a[i].productie);
/*if ( v[i][j]-w<dif && w<=v[i][j] )
{
dif=v[i][j]-w;
//if (j<costmin)
costmin=j;
}
else
if (v[i][j]-w==dif)
if (j<costmin)
costmin=j;
*/
if (j<costmin && v[1][j]>=w )
costmin=j;
}
else
v[1][j]=v[0][j];
}
for(j=0;j<=w;j++)
v[0][j]=v[1][j];
}
fout<<costmin;
}
return 0;
}