Submission #1364325

#TimeUsernameProblemLanguageResultExecution timeMemory
1364325thisisadarshKnapsack (NOI18_knapsack)C++20
73 / 100
394 ms327680 KiB
#include <iostream>
#include <vector>
#include <array>
#include <functional>
#include <cstdint>
using namespace std;

#define int int64_t

int32_t main() {
    int n, m;
    cin >> n >> m;

    vector<array<int, 3>> a(m);
    for (int i = 0; i < m; ++i) {
        cin >> a[i][0] >> a[i][1] >> a[i][2];
    }

    vector<vector<int>> dp(m, vector<int>(n + 1, -1));

    function<int(int, int)> f = [&](int j, int w) -> int {
        if (j == m) return 0;

        if (dp[j][w] != -1) return dp[j][w];

        int answer = 0;

        for (int k = 0; k <= a[j][2]; k++) {
            int weightNeeded = k * a[j][1];
            if (weightNeeded > w) break;

            answer = max(answer, k * a[j][0] + f(j + 1, w - weightNeeded));
        }

        return dp[j][w] = answer;
    };

    cout << f(0, n) << '\n';
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...