Cod sursa(job #403967)

Utilizator nandoLicker Nandor nando Data 25 februarie 2010 16:54:13
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <cstdio>

int cost[5001],gen[1001][2],g,w;
const int none=5000000;

int main(){
	FILE* fin=fopen("energii.in","r");
	freopen("energii.out","wt",stdout);
	fscanf(fin,"%d %d",&g,&w);
	for(int i=0;i<g;i++){
		fscanf(fin,"%d %d",&gen[i][0],&gen[i][1]);
	}
	for(int i=0;i<=w;i++){
		cost[i]=none;
	}
	for(int i=0;i<g;i++){
		for(int j=w;j>=0;j--){
			if(cost[j]!=none){
				if(j+gen[i][0]>=w){
					if(cost[j]+gen[i][1]<cost[w]){
						cost[w]=cost[j]+gen[i][1];
					}
				}else if(cost[j]+gen[i][1]<cost[j+gen[i][1]]){
                       cost[j+gen[i][0]]=cost[j]+gen[i][1];
				}
			}
		}
		if(gen[i][0]>=w){
			if(gen[i][1]<cost[w]){
				cost[w]=gen[i][1];
			}
		}else if(cost[gen[i][0]]>cost[i]){
			cost[gen[i][0]]=cost[i];
		}
	}
	printf("%d\n",(cost[w]==none)?-1:cost[w]);
	return 0;
}