Cod sursa(job #2110460)

Utilizator CammieCamelia Lazar Cammie Data 20 ianuarie 2018 17:54:43
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>
#include <cstring>

#define inf 0x3f3f3f3f
#define MAXN 1010
#define MAXM 5010

using namespace std;

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

int N, E, dp[MAXN][MAXN];

struct str{
    int e, c;
};

str g[MAXN];

inline void Read() {
    fin >> N >> E;

    for (int i = 1; i <= N; i++) {
        fin >> g[i].e >> g[i].c;
    }
}

inline void Dinamica() {
    for (int i = 0; i <= E; i++)
        dp[0][i] = inf;

    for (int i = 1; i <= N; i++) {
        for (int j = 1; j <= E; j++) {
            dp[i][j] = inf;
            if (g[i].e >= j) {
                dp[i][j] = min(dp[i - 1][j], g[i].c);
            }
            else {
                dp[i][j] = min(dp[i - 1][j], dp[i - 1][j - g[i].e] + g[i].c);
            }
        }
    }

    if (dp[N][E] == inf)
        fout << -1;
    else
        fout << dp[N][E];
}

int main () {
    Read();
    Dinamica();

    fin.close(); fout.close(); return 0;
}