Cod sursa(job #751900)

Utilizator ephgstefana gal ephg Data 27 mai 2012 13:00:32
Problema Energii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 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;
	freopen("energii.in","r",stdin);
	freopen("energii.out","w",stdout);
	scanf("%d %d",&n,&w);
	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*100;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;
		}
	}
	va=sp[w];
	for(i=w;i<=w+2*maxim;++i)if(va>sp[i]&&sp[i]!=0)va=sp[i];
	printf("%d",va);
	return 0;
}