Cod sursa(job #88077)

Utilizator swift90Ionut Bogdanescu swift90 Data 30 septembrie 2007 10:49:57
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct gen{
	int e,c;
};
gen x[1001];
int cost[8000],g,w;
void dinamic(int j){
	int i;
	for(i=w;i>=0;--i)
		if(cost[i]){
			if(cost[i+x[j].e]==0)
				cost[x[j].e+i]=cost[i]+x[j].c;
			else
				if(cost[x[j].e+i]<cost[i]+x[j].c)
					cost[x[j].e+i]=cost[i]+x[j].c;
		}
}
int main(){
	FILE*in=fopen("energii.in","r");
	FILE*out=fopen("energii.out","w");
	int i,s=0;
	
	fscanf(in,"%d %d",&g,&w);
	for(i=0;i<g;i++){
		fscanf(in,"%d %d",&x[i].e,&x[i].c);
		s+=x[i].e;
	}
	
	if(s<w){
		fprintf(out,"-1\n");
		return 0;
		fclose(in);
		fclose(out);
	}
	cost[0]=1;
	for(i=0;i<g;++i)
		dinamic(i);
	
	s=100000000;
	
	for(i=w;i<7000;++i){
		if(cost[i] && cost[i]<s)
			s=cost[i];
	}
	
	fprintf(out,"%d\n",s-1);
	
	fclose(in);
	fclose(out);
	return 0;
}