Cod sursa(job #3313633)

Utilizator catalinmarincatalinmarin catalinmarin Data 5 octombrie 2025 17:25:22
Problema Problema rucsacului Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 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;

        fin >> greutate >> cost;

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

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

            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;
}