Cod sursa(job #1105462)

Utilizator pulseOvidiu Giorgi pulse Data 11 februarie 2014 20:20:19
Problema Energii Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <cstdio>
#include <vector>

using namespace std;

#define NMAX1 1003
#define NMAX2 5003
#define INF 10003

int G, W, sum_check = 0, Ans;
int Sol[NMAX1][NMAX2];
int En[NMAX1], Cost[NMAX1];

void Read_Data ()
{
	scanf ("%d %d", &G, &W);
	for (int i = 1; i <= G; ++i)
	{
		scanf ("%d %d", &En[i], &Cost[i]);
		sum_check += En[i];
	}
}

int Solve ()
{
	if (sum_check < W)
		return -1;
	else
	{
		for (int i = 1; i <= G; ++i)
			Sol[i][0] = INF;
		for (int i = 1; i <= W; ++i)
			Sol[0][i] = INF;

		for (int i = 1; i <= G; ++i)
		{
			for (int j = 1; j <= W; ++j)
			{
				if (En[i] < j)
					Sol[i][j] = min (Cost[i - 1] + Sol[i - 1][j - En[i]], Sol[i - 1][j]);
				else
					Sol[i][j] = min (Cost[i], Sol[i - 1][j]);
			}
		}

		return Sol[G][W];
	}
}

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

	Read_Data ();

	int Ans = Solve ();

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

	return 0;
}