Submission #1305159

#TimeUsernameProblemLanguageResultExecution timeMemory
1305159aarnavanandKnapsack (NOI18_knapsack)C++20
73 / 100
1095 ms1580 KiB
#include <bits/stdc++.h>
using namespace std;

int main() {
    int S, N;
    cin >> S >> N;

    vector<int> V(N), W(N), K(N);
    for (int i = 0; i < N; i++) {
        cin >> V[i] >> W[i] >> K[i];
    }

    vector<long long> dp(S + 1, 0);

    for (int i = 0; i < N; i++) {
        // copy current dp to avoid overwriting
        vector<long long> new_dp = dp;

        for (int w = 0; w <= S; w++) {
            if (dp[w] == 0 && w != 0) continue;

            // try taking c copies of item i
            for (int c = 1; c <= K[i]; c++) {
                int new_w = w + c * W[i];
                if (new_w > S) break;

                new_dp[new_w] = max(
                    new_dp[new_w],
                    dp[w] + (long long)c * V[i]
                );
            }
        }

        dp = new_dp;
    }

    long long ans = 0;
    for (int w = 0; w <= S; w++) {
        ans = max(ans, dp[w]);
    }

    cout << ans << endl;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...