Pagini recente » Cod sursa (job #780252) | Cod sursa (job #2749936) | Cod sursa (job #115305) | Cod sursa (job #2446641) | Cod sursa (job #2850409)
#include <iostream>
#include <vector>
#include <limits>
#include <fstream>
using namespace std;
struct Generator {
const int energy;
const int cost;
};
int solve(const int req_energy, const vector<Generator> &generators) {
const auto number_of_gen = generators.size();
constexpr auto int_max = 6000000;
vector<vector<int>> cost_min(number_of_gen + 1, vector<int>(req_energy + 1, int_max));
for (int i = 1; i <= req_energy; ++i)
if (i <= generators[1].energy)
cost_min[1][i] = generators[1].cost;
for (auto i = 2; i <= generators.size(); ++i) {
const auto generator = generators[i - 1];
for (int energy = 1; energy <= req_energy; ++energy) {
if (energy - generator.energy > 0) {
cost_min[i][energy] = min(
cost_min[i - 1][energy],
cost_min[i - 1][energy - generator.energy] + generator.cost
);
} else {
cost_min[i][energy] = min(cost_min[i - 1][energy], generator.cost);
}
}
}
return cost_min[number_of_gen][req_energy] == int_max ? -1 : cost_min[number_of_gen][req_energy];
}
int main() {
ifstream in("energii.in");
ifstream::sync_with_stdio(false);
int G{};
int W{};
in >> G >> W;
vector<Generator> generators{};
for (int i = 0; i < G; i++) {
int e{}, c{};
in >> e >> c;
generators.push_back({e, c});
}
ofstream out("energii.out");
out << solve(W, generators);
return 0;
}