Cod sursa(job #3033513)

Utilizator georgecristian2002Raducanu George-Cristian georgecristian2002 Data 24 martie 2023 08:20:22
Problema Problema rucsacului Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <bits/stdc++.h>

using namespace std;

#define NMAX 50005
#define GMAX 100005

int dp[NMAX][GMAX];
int p[NMAX], g[NMAX];

int main(void) {

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

    int n, G;
    fin >> n >> G;
    
    for (int i = 1; i <= n; ++i) {
        fin >> g[i] >> p[i];
    }
    
    for (int i = 0; i <= n; ++i) {
        dp[i][0] = 0;
        for (int j = 1; j <= G; ++j) {
            dp[i][j] = -1;
        }
    }
    for (int i = 1; i <= n; ++i) {
        for (int j = 0; j <= G; ++j) {
            if (j >= g[i]) {
                if (dp[i - 1][j - g[i]] != -1)
                    dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - g[i]] + p[i]);
                else dp[i][j] = dp[i - 1][j];
            } else {
                dp[i][j] = dp[i - 1][j];
            }
        }
    }
    

    // for (int i = 0; i <= n; ++i) {
    //     for (int j = 0; j <= G; ++j) {
    //         fout << dp[i][j] << " ";
    //     }
    //     fout << endl;
    // }

    fout << dp[n][G];

    fin.close();
    fout.close();
    return 0;
}