Cod sursa(job #220649)

Utilizator SheepBOYFelix Liviu SheepBOY Data 11 noiembrie 2008 21:43:00
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <stdio.h>

#define gmax 1005
#define wmax 5005
#define inf 10000000

struct nimic
{
	int e, c;
};

int g, w, min=inf;
nimic G [gmax], poz [wmax];

void scan ()
{
	int i;
	scanf ("%d%d", &g, &w);
	for (i=1; i<=g; ++i)
		scanf ("%d%d", &G [i].e, &G [i].c);

}

void init ()
{
	int i;
	for (i=1; i<=w; ++i)
		poz [i].c=inf;
}

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

void sume ()
{
	int i, j, a;
	poz [0].e=1;
	poz [0].c=0;
	init ();
	for (i=1; i<=g; ++i)
		for (j=w; j>=0; --j)
			if (poz [j].e != 0)
			{
				a=j+G [i].e;
				if (a >= w)
				{
					if (min > poz [j].c+G[i].c)
						min=poz [j].c+G [i].c;
				}
				else
				{
					poz [a].c=minim (poz [a].c, poz [j].c+G [i].c);
					poz [a].e=1;
				}
			}
			
}

int main ()
{
	freopen ("energii.in", "r", stdin);
	freopen ("energii.out", "w", stdout);
	scan ();
	sume ();
	if (min < inf)
		printf ("%d\n", min);
	else
		printf ("-1");
	return 0;
}