Pagini recente » Cod sursa (job #1327397) | Cod sursa (job #817622) | Cod sursa (job #1147297) | Cod sursa (job #1509257) | Cod sursa (job #902217)
Cod sursa(job #902217)
#include <cstdio>
#include<vector>
#include<algorithm>
#include<utility>
#define cost second
#define power first
#define nmax 1001
using namespace std;
vector<pair <int,int> > gen(nmax);
vector <int> D(10001);
int n,w,i;
int cost_total;
int knapsack();
int main()
{
FILE *f,*g;
f=fopen("energii.in","r");
g=fopen("energii.out","w");
fscanf(f,"%d%d",&n,&w);
for(i=1;i<=n;i++)
fscanf(f,"%d%d",&gen[i].first,&gen[i].second),cost_total+=gen[i].second;
if(cost_total<w)
fprintf(g,"%d",-1);
else
fprintf(g,"%d ",knapsack());
// for(i=1;i<=w+8;i++)
// fprintf(g,"%d ",D[i]);
fclose(f);
fclose(g);
return 0;
}
int knapsack()
{
int cw,j;
for(cw=1;cw<=n;cw++)
{
for(j=w;j>=0;--j)
if(D[j])
if(D[j+gen[cw].power]>gen[cw].cost+D[j] || !D[j+gen[cw].power])
D[j+gen[cw].power]=gen[cw].cost+D[j];
if(gen[cw].cost<D[gen[cw].power] || !D[gen[cw].power])
D[gen[cw].power]=gen[cw].cost;
}
for(i=w;;i++)
if(D[i])
return D[i];
}