Cod sursa(job #144335)

Utilizator MarquiseMarquise Marquise Data 27 februarie 2008 14:07:33
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <stdio.h>

#define GMAX 1005
#define WMAX 5005
#define INF 100000000

int g, w, e[GMAX], c[GMAX], r[WMAX];

int main()
{
	int i, j, min, l;

	freopen("energii.in", "r", stdin);
	freopen("energii.out", "w", stdout);

	scanf("%d %d", &g, &w);
	for ( i = 1; i <= g; i++)
		scanf("%d %d", &e[i], &c[i]);

	min = INF;
	for ( i = 1; i <= w; i++)
		r[i] = INF;

	for ( i = 1; i <= g; i++)
	{
		for ( j = w; j >= 1; j--)
		{

			l = j + e[i];
			if ( l < w )
			{
				if ( c[i] + r[j] <  r[l])
					r[l] = c[i] + r[j];
			}
			else
				if ( c[i] + r[j] < min)
					min = c[i] + r[j];
		}

		if ( e[i] < w)
		{
			if ( c[i] < r[e[i]])
				r[e[i]] = c[i];
		}
		else
			if ( c[i] < min)
				min = c[i];
	}

	if ( min == INF)
		printf("-1\n");
	else
		printf("%d\n", min);
	return 0;
}