Cod sursa(job #495331)

Utilizator Balmus_MaximBalmus Maximilian Balmus_Maxim Data 24 octombrie 2010 19:39:16
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <stdio.h>
#include <algorithm>
using namespace std;

struct rr{
	int cost;
	int en;
};

struct pos{
	int p;
	int cost;
};

int msp(pos a, pos b){
	return a.cost<b.cost;
};

pos sol[10009];

rr gen[1010];

int G, W, i,j;

int main()
{
	freopen("energii.in","r",stdin);
	freopen("energii.out","w",stdout);
	scanf("%d",&G);
	scanf("%d",&W);
	sol[0].p=1;
	for(i=1;i<=10002;i++){
		sol[i].cost=12000;
	}
	for(i=1;i<=G;i++){
		scanf("%d%d",&gen[i].en,&gen[i].cost);
		for(j=10002;j>=0;j--){
			if(sol[j].p==1){
				if(j+gen[i].en){
					sol[j+gen[i].en].p=1;
					if(sol[j].cost+gen[i].cost<sol[j+gen[i].en].cost){
						sol[j+gen[i].en].cost=sol[j].cost+gen[i].cost;
					}
				}
			}
		}
	}
	sort(sol+W+1,sol+10001,msp);
	int s=0;
	for(i=W;s==0 && i<=10002;i++){
		if(sol[i].p==1){
			s=1;
			printf("%d ",sol[i].cost);
		}
	}
	if(s==0){
		printf("-1");
	}
	return 0;
}