Pagini recente » Cod sursa (job #735207) | Cod sursa (job #2364703) | Cod sursa (job #1509244) | Cod sursa (job #1144669) | Cod sursa (job #1873118)
#include <fstream>
#include <vector>
#include <algorithm>
#include <iostream>
#define INT_MAX 2147483647
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;
}