Cod sursa(job #751907)

Utilizator ephgstefana gal ephg Data 27 mai 2012 13:19:52
Problema Energii Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <cstdio>
struct gen{
	int e, c;
};
int min (int a,int b){
	if(a<b)return a;
	return b;
}
gen a[1005];
int w, n,ok[1000005],sp[1000005];
int main () {
	int i,s=0,j,maxim=-1,va=99999999;
	freopen("energii.in","r",stdin);
	freopen("energii.out","w",stdout);
	scanf("%d %d",&n,&w);
	for(i=1;i<=1000005;++i)sp[i]=99999999;
	for(i=1;i<=n;++i){
		scanf("%d %d",&a[i].e,&a[i].c);
		s+=a[i].e;
		//if(maxim<a[i].e)maxim=a[i].e;
	}
	if(s<w){
		printf("-1");
		return 0;
	}
	ok[0]=1;
	for(i=1;i<=n;++i){ //generatoarele
		for(j=w;j>=0;--j)if(ok[j]){  //energia cumualata
			ok[j+a[i].e]=1;
			if(sp[j+a[i].e]!=0)sp[j+a[i].e]=min(sp[a[i].e+j],sp[j]+a[i].c);
			else sp[j+a[i].e]=sp[j]+a[i].c;
			if(j+a[i].e>=w)va=min(va,sp[j+a[i].e]);
		}
	}
	/*va=sp[w];
	for(i=w;i<=w+maxim;++i)if(va>sp[i]&&sp[i]!=0)va=sp[i];*/
	printf("%d",va);
	return 0;
}