Pagini recente » Cod sursa (job #2138138) | Cod sursa (job #1251741) | Cod sursa (job #1443839) | Cod sursa (job #1638609) | Cod sursa (job #902237)
Cod sursa(job #902237)
#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 i,j;
for(i=1;i<=n;i++)
{
for(j=w-1;j>0;j--)
if(D[j]!=0)
if(D[j]+gen[i].cost<D[j+gen[i].power] || D[j+gen[i].power]==0)
D[j+gen[i].cost]=D[j]+gen[i].cost;
if(D[gen[i].power]>gen[i].cost || D[gen[i].power]==0)
D[gen[i].power]=gen[i].cost;
}
for(i=w;;i++)
if(D[i])
return D[i];
}