Cod sursa(job #3313634)

Utilizator catalinmarincatalinmarin catalinmarin Data 5 octombrie 2025 17:31:18
Problema Problema rucsacului Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("rucsac.in");
ofstream fout("rucsac.out");

int dp[2][10005];

// dp[(i % 2)[j] = care este costul maxim pe care il pot lua daca iau obiectul i sau nu
//dp[i % 2][j] = fie iau obiectul i, fie nu-l iau
// il iau: dp[i % 2][j] = dp[(i - 1) % 2][j - v[i].greutate] + v[i].cost
// nu il iau: dp[i % 2][j] = dp[(i - 1) % 2][j];

int main() {

    int n, g;
    fin >> n >> g;

    for (int i = 1; i <= n; i++) {

        int greutate, cost;
        int curr_i = i % 2;
        int last_i = (i - 1) % 2;

        fin >> greutate >> cost;

        for (int j = 0; j <= g; j++) {

            if (j < greutate)
                dp[curr_i][j] = dp[last_i][j];
            else
                dp[curr_i][j] = max(dp[last_i][j - greutate] + cost, dp[last_i][j]);

        }

    }

    int ans = 0;

    for (int i = 1; i <= g; i++) {
        ans = max(ans, dp[n % 2][i]);
    }

    fout << ans;
    return 0;
}