Cod sursa(job #301804)

Utilizator runnaway90Oprescu Radu Constantin runnaway90 Data 8 aprilie 2009 14:21:31
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<stdio.h>
#include<string.h>
#define G 1002
#define W 5002

long a[W],b[W],eg[G],cg[G],n,k,i,j,w;

long min(long a,long b)
{
	if (a<b) return a;
	else	 return b;
}

int main()
{
	freopen("energii.in","r",stdin);
	freopen("energii.out","w",stdout);
	scanf("%ld %ld",&n,&k);
	for(i=1;i<=n;i++)
		scanf("%ld %ld",&eg[i],&cg[i]);
	for (j=1;j<=k;j++)
		if (eg[1]>=j)
			a[j]=cg[1];
		else
			a[j]=2000000000;
	for(i=2;i<=n;i++)
	{
		for(j=1;j<=k;j++)
		{
			if (eg[i]>=j)	b[j]=cg[i];
			else
					b[j]=2000000000;

			if (j-eg[i]>0)
				b[j]=min(a[j-eg[i]]+cg[i],a[j]);
			else
                        	b[j]=min(b[j],a[j]);

		}
                memcpy(a,b,sizeof(b));
	}

	if (b[k]==2000000000)
		printf("%ld\n",-1);
	else
		printf("%ld\n",b[k]);
	return 0;
}