Cod sursa(job #901362)

Utilizator adascaluAlexandru Dascalu adascalu Data 1 martie 2013 09:49:16
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#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];
}