Cod sursa(job #3005699)

Utilizator k20ySabaceag Marius k20y Data 17 martie 2023 10:16:42
Problema Problema rucsacului Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <bits/stdc++.h>
using namespace std;

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

typedef long long ll;

const int N = 5000 + 5, W =  1e4 + 5;

ll profit[N],weight[N];

// linia dp[i] - posibilele valori daca am lua obiectul i
ll dp[W];

int main()
{
    int n,w; in>>n>>w;

    for(int i=1;i<=n;i++)
        in>>weight[i]>>profit[i];

    dp[weight[1]] = profit[1];
    ll gMAX = weight[1];


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


        //cazuri generale

        for(int j= gMAX; j>=1;j--)
            if(dp[j] && dp[j] + profit[i] > dp[j+weight[i]] && j+weight[i] <= w)
        {
            dp[j+weight[i]] = dp[j] + profit[i];
            gMAX = max(gMAX,j+weight[i]);
        }

        //cazul in care punem doar obiectul i in rucsac

        dp[weight[i]] = max(dp[weight[i]],profit[i]);

    }

    ll profitMAX = -1;

    for(int i=1;i<=w;i++) profitMAX = max(profitMAX,dp[i]);

    out<<profitMAX;
}