Cod sursa(job #902217)

Utilizator adascaluAlexandru Dascalu adascalu Data 1 martie 2013 13:18:29
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 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;
    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];
}