Cod sursa(job #30759)

Utilizator vmaneavmanea vmanea Data 15 martie 2007 00:15:42
Problema Energii Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <stdio.h>

#define infinit 32767
#define nmax 1001
#define vmax 9001

int G, W, i, g, emax, minim, EG[nmax], CG[nmax];

int min[nmax][vmax];

int main(void)
{
	freopen("energii.in", "r", stdin);
	freopen("energii.out", "w", stdout);

	scanf("%d%d", &G, &W);

	for (i = 1; i <= G; ++i)
	{
		scanf("%d%d", &EG[i], &CG[i]);
		emax += EG[i];
	}

	if (emax < W)
	{
		printf("-1\n");
		return 0;
	}
	else
	{
		for (g = 1; g <= emax; ++g) min[1][g] = infinit;

		min[1][EG[1]] = CG[1];

		for (g = 1; g <= W; ++g)
		for (i = 2; i <= G; ++i)
		{
			min[i][g] = min[i - 1][g];

			if (g - EG[i] >= 0 && min[i - 1][g - EG[i]] != infinit)
			if (CG[i] + min[i - 1][g - EG[i]] < min[i][g])
				min[i][g] = min[i - 1][g - EG[i]] + CG[i];
		}
	}

	for (minim = infinit, g = W; g <= emax; ++g)
		if (minim > min[G][g]) minim = min[N][g];

	printf("%d\n", minim);

	return 0;
}