Pagini recente » Cod sursa (job #2692174) | Cod sursa (job #936653) | Cod sursa (job #2251383) | Cod sursa (job #2418619) | Cod sursa (job #2199881)
#include <algorithm>
#include <fstream>
#include <utility>
#include <vector>
#define INF 0xf3f3f3f3
int main() {
std::ifstream in("energii.in");
std::ofstream out("energii.out");
unsigned g, w;
in >> g >> w;
std::vector<std::pair<unsigned, unsigned>> generators;
generators.reserve(g);
for (unsigned i = 0; i < g; i++) {
unsigned energy, cost;
in >> energy >> cost;
generators.push_back(std::make_pair(energy, cost));
}
std::vector<std::vector<unsigned>> dp;
dp.reserve(g + 1);
for (unsigned i = 0; i <= g; i++) {
dp.push_back(std::vector<unsigned>());
dp[i].reserve(w);
for (unsigned j = 0; j < w; j++) {
dp[i].push_back(INF);
}
}
for (unsigned i = 1; i <= g; i++) {
for (unsigned j = 0; j < w; j++) {
unsigned previousMax = dp[i - 1][j];
unsigned currentCost = generators[i - 1].second;
int subEnergy = j + 1 - generators[i - 1].first;
unsigned subCost = subEnergy <= 0 ? 0 : dp[i - 1][subEnergy];
dp[i][j] = std::min(previousMax, currentCost + subCost);
}
}
if (dp[g][w - 1] == INF) out << -1 << "\n";
else out << dp[g][w - 1] << "\n";
return 0;
}