Cod sursa(job #2972687)

Utilizator AndreiBadAndrei Badulescu AndreiBad Data 30 ianuarie 2023 08:54:03
Problema Energii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
//
//  main.cpp
//  Energii (infoarena)
//
//  Created by Andrei Bădulescu on 25.01.23.
//

//#include <iostream>
#include <fstream>

using namespace std;

ifstream cin("energii.in");
ofstream cout("energii.out");

const int P = 5000;
const int N = 1000;

struct item {
    int power, cost;
};

item items[N + 1];
int costs[P + 1];
int required, n;

int main() {
    cin >> n >> required;

    for (auto i = 1; i <= n; i++) {
        cin >> items[i].power >> items[i].cost;
    }

    for (auto i = 1; i <= P; i++) {
        costs[i] = -1;
    }

    for (auto i = 1; i <= n; i++) {
        for (auto j = required; j > required - items[i].power; j--) {
            if (costs[j] > 0) {
                costs[required] = min(costs[required], costs[j] + items[i].cost);
            } else {
                costs[required] = costs[j] + items[i].cost;
            }
        }

        for (auto j = required - items[i].power; j >= 0; j--) {
            if (costs[j] >= 0) {
                if (costs[j] == 0) {
                    costs[j + items[i].power] = costs[j] + items[i].cost;
                } else {
                    costs[j + items[i].power] = min(costs[j + items[i].power], costs[j] + items[i].cost);
                }
            }
        }
    }

    cout << costs[required];
    return 0;
}