Pagini recente » Cod sursa (job #2222088) | Cod sursa (job #1343143) | Cod sursa (job #301798) | Cod sursa (job #2695489) | Cod sursa (job #900992)
Cod sursa(job #900992)
#include <cstdio>
#include<vector>
#include<algorithm>
#include<utility>
#define nmax 1001
using namespace std;
vector<pair <int,int> > gen(nmax);
vector <long> D(5001+nmax);
int n,w,i;
long long cost_total;
long long 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,"%lld ",knapsack());
//for(i=1;i<=w+4;i++)
//fprintf(g,"%lld ",D[i]);
fclose(f);
fclose(g);
return 0;
}
long long knapsack()
{
long long cw,j;
bool ok=true;
for(cw=1;ok;cw++)
{
for(j=1;j<=n;j++)
{
if(gen[j].first==cw)
D[cw]=gen[j].second;
if(gen[j].first<=cw)
D[cw]=max(D[cw],D[cw-gen[j].first]+gen[j].second);
}
if(cw>=w &&D[cw])
ok=false;
}
return D[cw-1];
}