Cod sursa(job #88433)

Utilizator swift90Ionut Bogdanescu swift90 Data 2 octombrie 2007 11:16:04
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<stdio.h>
struct gen{
	int e,c;
};
gen nr[1001];
int w,cost[5010],cmin=1000000000;
void dinamic(int j){
	int i;
	/*
	if(nr[j].e>=w){
		if(cmin==0)
			cmin=nr[j].c+1;
		else
			if(nr[j].c<cmin)
				cmin=nr[j].e;
	}
	else{
	*/
		for(i=w;i>=0;--i){
			if(cost[i]){
				if(i+nr[j].e>=w && nr[j].c+cost[i]<cmin)
					cmin=nr[j].c+cost[i];
				if(nr[j].e+i<w){
					if(nr[j].c+cost[i]<cost[i+nr[j].e]||cost[i+nr[j].e]==0)
						cost[nr[j].e+i]=cost[i]+nr[j].c;
					/*
					else
						if(cost[i+nr[j].e]==0)
							cost[nr[j].e+i]=cost[i]+nr[j].c;
					*/
				}
			}
		}
	
}
int main(){
	freopen("energii.in","r",stdin);
	freopen("energii.out","w",stdout);
	int g,i;
	scanf("%d%d",&g,&w);
	for(i=0;i<g;++i)
		scanf("%d%d",&nr[i].e,&nr[i].c);
	
	cost[0]=1;
	for(i=0;i<g;i++)
		dinamic(i);
	
	printf("%d\n",cmin<1000000000?cmin-1:-1);
	
	return 0;
}