Cod sursa(job #596522)

Utilizator stefanzzzStefan Popa stefanzzz Data 17 iunie 2011 17:06:25
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream.h>
#define MAX 2000000000

int g, w, eg[1001], cg[1001], cmin[5001], emin[5001];
bool uz[5001][1001];

void citire();
void initializare();
void calcul();


main(){
	freopen("energii.in", "r", stdin);
	freopen("energii.out", "w", stdout);
	citire();
	initializare();
	calcul();
	printf("%d", cmin[w]);
}

void citire(){
	int i;
	scanf("%d%d", &g, &w);
	for(i=1;i<=g;i++)
		scanf("%d%d", &eg[i], &cg[i]);}

void initializare(){
	for(int i=1;i<=w;i++)
		cmin[i]=-1;}
void calcul(){
	int mine,jj;
	long minc;
	for(int i=1;i<=w;i++){
		minc=MAX;
		for(int j=1;j<=g;j++){
			if(eg[j]>=i-emin[i-eg[j]]&&uz[i-eg[j]][j]==0&&minc>cmin[i-eg[j]]+cg[j]){
				minc=cmin[i-eg[j]]+cg[j];
				mine=emin[i-eg[j]]+eg[j];
				jj=j;}}
		if(minc!=MAX){
			cmin[i]=minc;
			emin[i]=mine;
			for(int k=1;k<=g;k++){
				if(uz[i-eg[jj]][k])
					uz[i][k]=1;}
			uz[i][jj]=1;}}}