Cod sursa(job #495359)

Utilizator Balmus_MaximBalmus Maximilian Balmus_Maxim Data 24 octombrie 2010 20:21:27
Problema Energii Scor 55
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <stdio.h>
#include <algorithm>
using namespace std;

#define maxs 10007

struct rr{
	int c;
	int e;
};

struct pos{
	int p;
	int c;
};

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

pos sol[maxs];

rr gen[1010];

int G, W, i,j,e,c;

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<=maxs;i++){
		sol[i].c=32000;
	}
	for(i=1;i<=G;i++){
		scanf("%d%d",&e,&c);
		//printf("%d %d\n",gen[3].c,j);
		for(j=maxs;j>=0;j--){
			//printf("%d %d\n",gen[3].c,j);
			if(sol[j].p==1 || j+e<=maxs){
				sol[j+e].p=1;
				if(sol[j].c+c<sol[j+e].c){
					sol[j+e].c=sol[j].c+c;
					//printf("%d %d\n",sol[j+gen[i].e].c,gen[i].c);
				}
			}
		}
	}
	sort(sol+W,sol+maxs+1,msp);
	int s=0;
	for(i=W; i<=maxs;i++){
		if(sol[i].p==1){
			printf("%d ",sol[i].c);
			return 0;
		}
	}
	printf("-1");
	return 0;
}