Cod sursa(job #1873125)

Utilizator loghin.alexandruLoghin Alexandru loghin.alexandru Data 8 februarie 2017 20:02:47
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <fstream>
#include <vector>
#include <algorithm>
#include <iostream>

#define INT_MAX 1000000
using namespace std;

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

struct generator
{
	int power;
	int requiredPower;
};

vector<generator> generators;

int solutions[1001][5001] = {};


void setInfinity(int w, int g)
{
	for (unsigned int i = 0; i <= w; ++i)
	{
		for (unsigned int j = 0; j <= g; ++j)
		{
			solutions[i][j] = INT_MAX;

		}
	}
}


void dynamicProgramming(int numberOfGenerators, int powerToBeMade)
{
	for (int i = 1; i <= numberOfGenerators; ++i)
	{
		for (int j = 1; j <= powerToBeMade; ++j)
		{
			if (j - generators[i].power > 0)
			{
				solutions[i][j] = min(solutions[i - 1][j], generators[i].requiredPower + solutions[i - 1][j - generators[i].power]);
			}
			else solutions[i][j] = min(solutions[i - 1][j], generators[i].requiredPower);
		}
	}
}

int main()
{
	int power = 0, numberOfGenerators = 0;
	fin >> numberOfGenerators >> power;
	int max = INT_MAX;
	generator x;
	x.power = 0;
	x.requiredPower = 0;
	generators.push_back(x);
	for (unsigned int i = 0; i < numberOfGenerators; ++i)
	{
		generator x;
		fin >> x.power;
		fin >> x.requiredPower;
		generators.push_back(x);
	}
	setInfinity(numberOfGenerators, power);
	dynamicProgramming(numberOfGenerators, power);

	if (solutions[numberOfGenerators][power] == INT_MAX)
	{
		fout << -1;
	}
	else
	{
		fout << solutions[numberOfGenerators][power];
	}
	return 0;
}