Cod sursa(job #3694)

Utilizator shadowmanAlex Matei shadowman Data 27 decembrie 2006 20:26:31
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <stdio.h>

int main()
{
	int i, j, g, w;
	int* eg;
	int* cg;
	int* c;
	int p = -1;

	freopen("energii.in", "rt", stdin);
	freopen("energii.out", "wt", stdout);

	scanf("%d%d", &g, &w);

	eg = new int[g];
	cg = new int[g];
	c = new int[ (2 * w) + 1 ];
	c[0] = 1;

	for(i = 1; i < (2 * w) + 1; i++) c[i] = 0;

	for(i = 0; i < g; i++)
	{
		scanf("%d%d", &eg[i], &cg[i]);
	}

	for(i = 0;  i < g; i++)
	{
		for(j = 2 * w; j >= eg[i]; j--)
		{
			if(c[j - eg[i]] && (!c[j] || (c[j - eg[i]] + cg[i] < c[j])))
			{
				c[j] = c[j - eg[i]] + cg[i];
	
				if(j >= w) 
				{
					if((p == -1) || (c[p] > c[j]))
						p = j;
				}
			}
		}
	}

	if(p != -1)
	{
		printf("%d\n", c[p] - 1);
	}
	else
	{
		printf("-1\n");
	}

	return 0;
}