Cod sursa(job #3134813)

Utilizator mire123Mircea Lupu mire123 Data 31 mai 2023 05:58:16
Problema Problema rucsacului Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

struct Obiect
{
    int greutate;
    int profit;
};

int rezolvaProblemaRucsac(int N, int G, Obiect obiecte[])
{
    int dp[N + 1][G + 1];

    for (int i = 0; i <= N; i++)
    {
        for (int j = 0; j <= G; j++)
        {
            if (i == 0 || j == 0)
                dp[i][j] = 0;
            else if (obiecte[i - 1].greutate <= j)
                dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - obiecte[i - 1].greutate] + obiecte[i - 1].profit);
            else
                dp[i][j] = dp[i - 1][j];
        }
    }

    return dp[N][G];
}

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

    int N, G;
    fin >> N >> G;

    Obiect obiecte[N];
    for (int i = 0; i < N; i++)
    {
        fin >> obiecte[i].greutate >> obiecte[i].profit;
    }

    int profitMaxim = rezolvaProblemaRucsac(N, G, obiecte);

    fout << profitMaxim;

    return 0;
}