Cod sursa(job #48087)

Utilizator slayer4uVictor Popescu slayer4u Data 4 aprilie 2007 13:17:43
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include<stdio.h>
long g,n,i,j,kn[10002],x[1002],cost[5002],sum,u[10002];
int main()
{
	freopen ("energii.in","rt",stdin);
	freopen ("energii.out","wt",stdout);
	
	scanf("%ld %ld",&n,&g);
	for (i=1;i<=10000;i++)
		kn[i]=32000;
	for (i=1;i<=n;i++)
		scanf("%ld %ld",&x[i],&cost[i]);
	for (i=1;i<=n;i++)
	{
		i=i;
		for (j=1;j<=g;j++)
		{
			if (kn[j]!=32000)
				if (u[j]!=1 || kn[j]!=cost[i])
				{
					if (kn[j+x[i]]>kn[j]+cost[i])
						kn[j+x[i]]=kn[j]+cost[i],u[j+x[i]]=u[j]+1;
				}
		}
		if (kn[x[i]]>cost[i])
			kn[x[i]]=cost[i];
	}

	for (i=g;g<=9999;g++)
		if (kn[g]!=32000)
			break;
	if (kn[g]==32000)
		printf("-1\n");
	else
		printf("%ld\n",kn[g]);
	return 0;
}