CCCPaste

Untitled

#include 

using namespace std;
int n;
int cost[105], weight[105];
long long dp[101][100001];
long long rek(int at, int weight_left) {
    if(at == n or weight_left == 0) {
        return 0;
    }
    if(dp[at][weight_left] != -1) {
        return dp[at][weight_left];
    }
    long long maks = -1e15;
    maks = max(maks, rek(at + 1, weight_left)); // sto ako ne go zememe ovoj element
    
    if(weight_left - weight[at] >= 0) {
        maks = max(maks, rek(at + 1, weight_left - weight[at]) + cost[at]); // sto ako go zememe ovoj element
    }
    dp[at][weight_left] = maks;
    return maks;
}
int main()
{
    cin >> n;
    int max_weight;
    cin >> max_weight;
    for(int i = 0; i < n; i++) {
        cin >> weight[i] >> cost[i];
    }
    
   
    for(int i = 0; i < n; i++) {
        for(int j = 0; j <= max_weight; j++) {
            dp[i][j] = -1;
        }
    }
    cout << rek(0, max_weight) << endl;
       return 0;
}