Cod sursa(job #403788)

Utilizator nandoLicker Nandor nando Data 25 februarie 2010 12:00:49
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <cstdio>
#include <cstdlib>

int cost[15000];

short gen[1010][2];

int main(){
	FILE* fin=fopen("energii.in","r");
	int g,w;
	fscanf(fin,"%u %u",&g,&w);
	for(int i=0;i<g;i++){
		fscanf(fin,"%hu %hu",&gen[i][0],&gen[i][1]);
	}
	for(int i=0;i<w;i++){
		cost[i]=1000000;
	}
	for(int i=0;i<g;i++){
		for(int j=w;j>0;j--){
			if(cost[j]!=1000000){
				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][0]]>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]]>gen[i][1]){
				cost[gen[i][0]]=gen[i][1];
			}
		}
	}
	for(int i=1;i<w;i++){
		printf("%u ",cost[i]);
	}
	if(cost[w]=1000000){
		printf("-1");
	}else{
		printf("%u",cost[w]);
	}
}