Pagini recente » Cod sursa (job #1045503) | Cod sursa (job #1428170) | Cod sursa (job #2426546) | Cod sursa (job #2088814) | Cod sursa (job #767175)
Cod sursa(job #767175)
#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[1000][2000];
energ a[2000];
int main()
{
int n,w,i,costmax=0,j,costmin=0,prd=0,dif=10000;
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[i][j]=max(v[i-1][j],v[i-1][j-a[i].cost]+a[i].productie);
if ( abs(w-v[i][j])<dif)
{
dif=w-v[i][j];
//if (j<costmin)
costmin=j;
}
else
if (w-v[i][j]==dif)
if (j<costmin)
costmin=j;
}
else
v[i][j]=v[i-1][j];
}
//for(j=0;j<=w;j++)
// v[0][j]=v[1][j];
}
fout<<costmin;
}
return 0;
}