Pagini recente » Cod sursa (job #2404996) | Cod sursa (job #2639862) | Cod sursa (job #130260) | Cod sursa (job #2247942) | Cod sursa (job #901362)
Cod sursa(job #901362)
#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,D[gen[i].power]=gen[i].cost;
if(cost_total<w)
fprintf(g,"%d",-1);
else
fprintf(g,"%d ",knapsack());
// for(i=1;i<=w+4;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];
}
for(i=w;;i++)
if(D[i])
return D[i];
}