Cod sursa(job #403316)

Utilizator runnaway90Oprescu Radu Constantin runnaway90 Data 24 februarie 2010 20:37:51
Problema Energii Scor 100
Compilator cpp Status done
Runda preoji2010_contest Marime 0.82 kb
#include<stdio.h>
#include<string.h>
#define G 1002
#define W 5002

long sol[2][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)
			sol[0][j]=cg[1];
		else
			sol[0][j]=2000000000;

	for(i=2;i<=n;i++)
	{
		for(j=1;j<=k;j++)
		{
			if (eg[i]>=j)	sol[(i+1)%2][j]=cg[i];
			else sol[(i+1) % 2][j]=2000000000;

			if (j-eg[i]>0)
				sol[(i+1)%2][j]=min(sol[i % 2][j-eg[i]]+cg[i],sol[i % 2][j]);
			else
                        	sol[(i+1)%2][j]=min(sol[(i+1)%2][j],sol[i % 2][j]);

		}
	}

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