Cod sursa(job #2327243)

Utilizator andra_moldovanAndra Moldovan andra_moldovan Data 24 ianuarie 2019 15:44:43
Problema Energii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream>
#include <cstring>

#define MAXN 1002
#define MAXM 5002
#define inf 0x3f3f3f3f

using namespace std;

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

struct two{
    int val, g;
};

two obj[MAXN];
int N, G, dp[2][MAXM];

inline void Read(int &N, int &G) {
    fin >> N >> G;

    for (int i = 1; i <= N; i++) {
        fin >> obj[i].g >> obj[i].val;
       // fin >> obj[i].val >> obj[i].g;
    }
}

inline void Dinamica(int N, int G) {
    memset(dp, inf, sizeof(dp));
    int la = 0, lc = 1;
    for (int i = 1; i <= N; i++) {
        for (int j = 1; j <= G; j++) {
            if (obj[i].g >= j) {
                dp[lc][j] = min(obj[i].val, dp[la][j]);
            }
            else
                dp[lc][j] = min(dp[la][j], dp[la][j - obj[i].g] + obj[i].val);
        }
        la = 1 - la; lc = 1 - lc;
    }

    if (dp[la][G] == inf)
        fout << -1;
    else
        fout << dp[la][G];
}

int main () {
    int N, G;

    Read(N, G);
    Dinamica(N, G);

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