Cod sursa(job #2892732)

Utilizator mihnea.tTudor Mihnea mihnea.t Data 23 aprilie 2022 13:48:37
Problema Energii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <bits/stdc++.h>

#define NMAX 1000
#define WMAX 5000
#define INF ((int)1e9)

using namespace std;

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

struct obj_info {
    int energy;
    int cost;
};

int n, w;
obj_info v[NMAX + 1];
int dp[NMAX + 1][WMAX + 1];

int main(void) {
    fin >> n >> w;
    
    for (int i = 1; i <= n; ++i) {
        int e, c;
        fin >> e >> c;
        v[i] = {e, c};
    }

    for (int i = 0; i <= n; ++i) {
        for (int j = 1; j <= w; ++j) {
            dp[i][j] = INF;
        }
    }

    for (int i = 0; i <= n; ++i) {
        dp[i][0] = 0;
    }

    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= w; ++j) {
            int prev_cost;
            if (j - v[i].energy < 0) {
                prev_cost = v[i].cost;
            } else {
                prev_cost = dp[i - 1][j - v[i].energy] + v[i].cost;
            }

            dp[i][j] = min(dp[i - 1][j], prev_cost);
            if (dp[i][j] == INF) {
                break;
            }
        }
    }

    fout << (dp[n][w] == INF ? -1 : dp[n][w]) << "\n";

    return 0;
}