Cod sursa(job #3278642)

Utilizator 1gbr1Gabara 1gbr1 Data 20 februarie 2025 12:53:36
Problema Problema rucsacului Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
#include <vector>
#include <iostream>
#include <algorithm>
#include <set>

using namespace std;

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

int w[5005], p[5005];
int dp[2][10005]; /// dp[i][j] = profitul maxim din primele i obiecte cu greutatea totala j
int n, G;

int main()
{
    fin >> n >> G;
    for (int i = 1; i <= n; i++)
        fin >> w[i] >> p[i];
    int currlin = 1;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= G; j++) {
            ///i = currlin, i - 1 = 1 - currlin
            dp[currlin][j] = dp[1 - currlin][j];
            ///dp[i][j] = max(dp[i - 1][j - w[i]] + p[i], dp[i - 1][j])
            if (j >= w[i] && dp[1 - currlin][j - w[i]] + p[i] > dp[currlin][j])
                dp[currlin][j] = dp[1 - currlin][j - w[i]] + p[i];
        }
        currlin = 1 - currlin;
    }
    int maxi = 0;
    for (int i = 1; i <= G; i++)
        maxi = max(maxi, dp[1 - currlin][i]);
    fout << maxi;
    return 0;
}