Cod sursa(job #609382)

Utilizator SteveStefan Eniceicu Steve Data 21 august 2011 06:09:19
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <fstream.h>

#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) > (b) ? (a) : (b))

int main ()
{
	long G, W, EG[10010], CG[10010], m[2][5010], Suma = 0, i, j;

	ifstream fin ("energii.in");
	ofstream fout ("energii.out");
	fin >> G >> W;

	for (i = 1; i <= G; i++)
	{
		fin >> EG[i] >> CG[i];
		Suma += EG[i];
	}

	for (j = 0; j <= W; j++)
	{
		m[0][j] = 20000;
	}
	fin.close ();

	if (Suma < W)
	{
		fout << "-1";
		fout.close ();
		return 0;
	}

	for (i = 1; i <= G; i++)
	{
		for (j = 1; j <= W; j++)
		{
			if (EG[i] < j) m[i % 2][j] = min (m[(i - 1) % 2][j], m[(i - 1) % 2][max(j - EG[i], 0)] + CG[i]);
			else m[i % 2][j] = min (m[(i - 1) % 2][j], CG[i]);
		}
	}
	fout << m[G % 2][W];
	fout.close ();
	return 0;
}