Cod sursa(job #3161334)

Utilizator octavian202Caracioni Octavian Luca octavian202 Data 26 octombrie 2023 17:43:06
Problema Problema rucsacului Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int NMAX = 5005;

int dp[2][2*NMAX], w[NMAX], p[NMAX];

int main() {

    int n, g;
    fin >> n >> g;
    for (int i = 1; i <= n; i++) {
        fin >> w[i] >> p[i];
    }

    for (int i = 0; i <= n; i++) {
        for (int j = 0; j <= g; j++) {
            if (i == 0 || j == 0) {
                dp[0][j] = 0;
                continue;
            }
            int l1 = (i % 2); // 0 sau 1
            int l2 = 1 - l1; // 1 sau 0
            if (w[i] > j) {
                dp[l1][j] = dp[l2][j];
                continue;
            }

            dp[l1][j] = max(dp[l2][j], dp[l2][j - w[i]] + p[i]);
        }
    }

    fout << dp[(n % 2)][g];



    return 0;
}