Cod sursa(job #2497567)

Utilizator Yato2Denis Scutariu Yato2 Data 22 noiembrie 2019 20:56:48
Problema Problema rucsacului Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>

using namespace std;
int n, gmax, sume[10200], g, val, poz[10200], k, kcop, sume1[10200], maxim;
ifstream in("rucsac.in");
ofstream out("rucsac.out");
bool f[10200];
int main() {    

    in >> n >> gmax;

    for(int i = 1; i <= n; ++i) {
        in >> g >> val;  
        kcop = k;
        for(int j = kcop; j >= 1; --j) {
            if(g + poz[j] <= gmax) {
                int p = g + poz[j];

                if(!sume1[p]){
                    sume1[p] = val + sume[poz[j]];
                    poz[++k] = p;
                }
                else {
                    if(sume1[p] < val + sume[poz[j]])   
                        sume1[p] = val + sume[poz[j]];
                }
            }
        }
        if(!f[g]){
            poz[++k] = g;
            f[g] = 1;
        }
        if(sume[g] < val)
            sume[g] = val;
        for(int j = 1; j <= k; ++j){
            if(sume[poz[j]] < sume1[poz[j]])
                sume[poz[j]] = sume1[poz[j]];
            if(sume[poz[j]] > maxim)
                maxim = sume[poz[j]];
        }
    }

    out << maxim;
    return 0;
}