Cod sursa(job #2741721)

Utilizator razvan_tanaseTanase Razvan-Andrei razvan_tanase Data 18 aprilie 2021 12:03:54
Problema Problema rucsacului Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>
#include <fstream>

using namespace std;

const char iname[] = "rucsac.in";
const char oname[] = "rucsac.out";

int main() {
    ifstream in(iname);

    int N, G, i, j;

    in >> N >> G;

    int** m = new int*[N];
    for (i = 0; i < N; ++i) {
        m[i] = new int[2];
    }

    for (i = 0; i < N; ++i) {
        in >> m[i][0] >> m[i][1];
    }
    in.close();

    vector<int> prev(G + 1);
    vector<int> curr(G + 1);

    for (i = m[0][0]; i <= G; ++i) {
        prev[i] = m[0][1];
    }

    int value, new_value, w;
    for (i = 1; i <= N - 1; ++i) {
        for (j = 1; j <= G; ++j) {
            w = m[i][0];
            if (w > j) {
                curr[j] = prev[j];
            } else {
                value = m[i][1];
                new_value = value + prev[j - w];

                if (new_value > prev[j]) {
                    curr[j] = new_value;
                } else {
                    curr[j] = prev[j];
                }
            }
        }
        prev = curr;
    }

    ofstream out(oname);
    out << curr[G];
    out.close();

    return 0;
}