Pagini recente » Cod sursa (job #1631366) | Cod sursa (job #329328) | Cod sursa (job #2068367) | Cod sursa (job #1858084) | Cod sursa (job #2850946)
#include <iostream>
#include <vector>
#include <array>
#include <climits>
#include <fstream>
using namespace std;
ifstream fin("energii.in");
ofstream fout("energii.out");
int sum(int first, int second) {
if (INT_MAX - first > second) {
return first + second;
} else return INT_MAX;
}
int minimum_cost(int number_of_generators, int necessary_power, const vector<int> &generator_power,
const vector<int> &generator_cost) {
vector<vector<int> > dp(necessary_power + 100, vector<int>(number_of_generators + 1, INT_MAX));
for (int i = 1; i <= necessary_power; i++) {
for (int j = 1; j <= number_of_generators; j++) {
if (dp[i][j] == INT_MAX) {
if (generator_power[j - 1] >= i) {
dp[i][j] = min(
generator_cost[j - 1],
dp[i][j - 1]
);
} else {
if (dp[i][j - 1] <= sum(dp[i - 1][j - 1], generator_cost[j - 1])) {
dp[i][j] = dp[i][j - 1];
} else {
dp[i][j] = sum(dp[i - 1][j - 1], generator_cost[j - 1]);
for (int i1 = i + 1; i1 <= generator_power[j - 1] + generator_power[j - 2]; i1++) {
dp[i1][j] = dp[i][j];
}
}
}
}
}
}
return dp[necessary_power][number_of_generators];
}
int main() {
int number_of_generators;
int necessary_power;
fin >> number_of_generators >> necessary_power;
vector<int> generator_power(number_of_generators);
vector<int> generator_cost(number_of_generators);
for (int i = 0; i < number_of_generators; i++) {
fin >> generator_power[i];
fin >> generator_cost[i];
}
fout << minimum_cost(number_of_generators, necessary_power, generator_power, generator_cost);
return 0;
}