Cod sursa(job #2850946)

Utilizator QTudorOancea Tudor-Alexandru QTudor Data 17 februarie 2022 20:20:03
Problema Energii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.92 kb
#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;
}