Cod sursa(job #938096)

Utilizator mvcl3Marian Iacob mvcl3 Data 11 aprilie 2013 19:04:24
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream>
#define NMAX 1009
#define GMAX 10009
using namespace std;

ifstream f("energii.in"); ofstream g("energii.out");

int N, S, G[NMAX], P[NMAX];
int DP[GMAX + NMAX * 5];

inline void read_Data() {

    f >> N >> S;

    for(int i = 1; i <= N; ++i) f >> P[i] >> G[i];
}

inline void solve() {
    int minim = 9999999999999;
    bool ok = false;

    for(int i = 1; i <= N; ++i)
        for(int j = S; j >= 0; --j) {

            if(j + P[i] > S && minim > j + P[i])
                minim = j + P[i];

            if(DP[j] + G[i] < DP[j + P[i]])
                DP[j + P[i]] = DP[j] + G[i];
        }

        if(minim == 9999999999999) g << "-1\n";
        else
            g << min(minim, (DP[S] > 0 ? DP[S] : 999999999)) << '\n';
}

int main() {

    read_Data();
    solve();

    g.close();
    return 0;
}