Cod sursa(job #900703)

Utilizator adascaluAlexandru Dascalu adascalu Data 28 februarie 2013 21:21:55
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#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());
    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(j>cw)
				D[cw]=max(D[cw],D[j-cw]+gen[j].second);
			else
				D[cw]=max(D[cw],(long)gen[j].second);
		if(cw>=w &&D[cw])
			ok=0;
	}
	return D[cw];
}