Cod sursa(job #2771842)

Utilizator MihaiIonescuIonescu Andrei Mihai MihaiIonescu Data 29 august 2021 15:22:31
Problema Energii Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
using namespace std;
ifstream cin("energii.in");
ofstream cout("energii.out");
int n, G, w[5001], p[5001], i, f[1000000], j, sol, s, ok, mini = 10005;
int main () {
    cin>>n>>G;
    for (i = 1;i <= n;i++) {
        cin>>w[i]>>p[i];
        s += w[i];
    }
    if (s < G) {
        cout<<-1;
        return 0;
    }
    for (i = 1;i <= n;i++) {
        for (j = G;j >= 1;j--)
            if (f[j] != 0) {
                if (j + w[i] <= G && f[j + w[i]] < f[j] + p[i])
                    f[j + w[i]] = f[j] + p[i];
            }
        if (w[i] <= G && p[i] > f[w[i]]) {
            f[w[i]] = p[i];
            if (p[i] == 0)
                ok = 1;
        }
    }

    for (i = 1;i <= G;i++)
        sol = max(sol, f[i]);
    if (sol != 0)
        cout<<sol;
    if (sol == 0 && ok == 1)
        cout<<sol;
    else if (sol == 0 & ok == 0) {
        for (i = 1;i <= n;i++) {
            if (w[i] >= G && p[i] < mini)
                mini = p[i];
        }
        cout<<mini;
        return 0;
    }
}