Cod sursa(job #138047)

Utilizator savimSerban Andrei Stan savim Data 17 februarie 2008 20:08:48
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <stdio.h>
#define lim 2000
int i,j,n,s,min;
int en[5010],g[5010][2];
int main()
{
	freopen("energii.in","r",stdin);
	freopen("energii.out","w",stdout);

	scanf("%d",&n);
	scanf("%d",&s);

	for (i=1; i<=n; i++)
		scanf("%d %d",&g[i][0],&g[i][1]);

	min=lim;
	for (i=1; i<=s; i++) en[i]=lim;

	for (i=1; i<=n; i++)
	{
		for (j=1; j<=s; j++)
		{
			if (j+g[i][0]<s && en[j+g[i][0]]>en[j]+g[i][1]) en[j+g[i][0]]=en[j]+g[i][1];
			if (j+g[i][0]>=s && min>en[j]+g[i][1]) min=en[j]+g[i][1];
		}
		if (g[i][0]>=s && g[i][1]<min) min=g[i][1];
		if (g[i][0]<s && g[i][1]<en[g[i][0]]) en[g[i][0]]=g[i][1];
	}

	if (min!=lim) printf("%d\n",min);
	else printf("-1\n");
        
	return 0;
}