Cod sursa(job #3149601)

Utilizator jumper007Raul Butuc jumper007 Data 10 septembrie 2023 13:45:20
Problema Energii Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <climits>
#include <algorithm>

using namespace std;

int main() {
    ifstream fin("energii.in");
    ofstream fout("energii.out");

    int G, W;
    fin >> G >> W;

    vector<int> dp(W + 1, INT_MAX);  // dp[i] = minimum cost for generating i units of energy
    dp[0] = 0;  // cost for 0 units of energy is 0

    for (int i = 0; i < G; ++i) {
        int E, C;
        fin >> E >> C;

        for (int w = W; w >= 0; --w) {
            if (dp[w] == INT_MAX) continue;  // We can't generate exactly w units of energy

            int new_w = w + E;
            if (new_w <= W) {
                dp[new_w] = min(dp[new_w], dp[w] + C);
            }
        }
    }

    if (dp[W] == INT_MAX) {
        fout << "-1\n";
    } else {
        fout << dp[W] << "\n";
    }

    fin.close();
    fout.close();

    return 0;
}