Cod sursa(job #608710)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 17 august 2011 18:52:43
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include<cstdio>
using namespace std;
int n,G;
int e[1005],g[1005];
int best[1005][5005];
int sol;

void Citire()
{
	int i;
	freopen("energii.in","r",stdin);
	scanf("%d %d",&n,&G);
	for(i=1;i<=n;i++)
		scanf("%d %d",e+i,g+i);
}

inline int Min(int a,int b)
{
	if(a<b)
		return a;
	return b;
}

void Rezolvare()
{
	int i,j;
	for(i=0;i<=n;i++)
		for(j=1;j<=G;j++)
			best[i][j]=2000000000;
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=G;j++)
		{
			if(e[i]<=j)
				best[i][j]=Min(best[i-1][j],best[i-1][j-e[i]]+g[i]);
			else
				best[i][j]=Min(best[i-1][j],g[i]);
		}
	}
}

void Afisare()
{
	freopen("energii.out","w",stdout);
	sol=best[n][G];
	if(sol!=2000000000)
		printf("%d\n",sol);
	else
		printf("-1\n");
}

int main()
{
	Citire();
	Rezolvare();
	Afisare();
	return 0;
}