Cod sursa(job #827019)

Utilizator moscaliuc_ovidiuMoscaliuc Ovidiu moscaliuc_ovidiu Data 1 decembrie 2012 15:22:10
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream>
#include <string.h>

#define MAX_N ((const unsigned int)1001)
#define MAX_G ((const unsigned int)5001)
#define MAX_E ((const unsigned int)10001)
#define INFINITE ((const unsigned int)-1)

int N, W;
unsigned int sol = INFINITE;

class Generator
{
public:
	int energie;
	int cost;
}generator[MAX_N];

unsigned int cost[MAX_E];
bool used[MAX_E];

int main()
{
	std::ifstream fin("energii.in");
	std::ofstream fout("energii.out");

	fin>>N>>W;

	for (int i = 0; i < N; ++ i)
		fin>>generator[i].energie>>generator[i].cost;

	memset(cost, INFINITE, MAX_E * sizeof(int));
	cost[0] = 0;
	used[0] = true;

	for (int i = 0; i < N; ++ i)
	{
		for (int j = W; j >= 0; j --)
		{
			if (used[j])
			{
				used[j + generator[i].energie] = true;

				if (cost[j + generator[i].energie] > cost[j] + generator[i].cost)
				{
					cost[j + generator[i].energie] = cost[j] + generator[i].cost;

					if (j + generator[i].energie >= W
						&& sol > cost[j + generator[i].energie])
						sol = cost[j + generator[i].energie];
				}
			}
		}
	}

	if (sol == INFINITE)
		fout<<-1;
	else
		fout<<sol;

	fin.close();
	fout.close();

	return 0;
}