Cod sursa(job #48397)

Utilizator tudalexTudorica Constantin Alexandru tudalex Data 4 aprilie 2007 19:07:37
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <stdio.h>
int d[15001],
    a[2][1001];
int i,j,g,w,min;

int main()
{
	freopen("energii.in","r",stdin);
	freopen("energii.out","w",stdout);
	scanf("%d %d", &g, &w);
//	printf("%d\n",w);
	for (i = 1; i<=g; ++i)
		scanf("%d %d",&a[0][i], &a[1][i]);
	for (i = 1; i<=w*2; ++i)
		d[i]=-1;
	d[0]=0;
	for (i = 1;  i<=w; ++i)
	{
		for (j = 2*w; j>-1; --j)
		{
			if (d[j]!=-1 && a[0][i]+j<2*w && (d[j+a[0][i]]> d[j]+a[1][i] || d[j+a[0][i]] == -1))
				d[j+a[0][i]]=d[j]+a[1][i];
		}
	}
	min=2000000000;
	for (i = w; i<2*w; ++i)
		if (d[i]<min && d[i]!=-1) min=d[i];
	if (min==2000000000) 
		printf("-1\n");
	else 
		printf("%d\n",min);
/*	for (i = 0; i<=2*w; ++i)
		printf("%d ",d[i]);
	printf("\n");*/
	return 0;
}