Submission #1219971

#TimeUsernameProblemLanguageResultExecution timeMemory
1219971brito.joaoKnapsack (NOI18_knapsack)C++20
37 / 100
1 ms332 KiB
#include <iostream>
#include <vector>
#include <algorithm>

int knapsack(int S, const std::vector<std::tuple<int, int, int>>& items) {
    std::vector<int> dp(S + 1, 0);

    for (const auto& [value, weight, count] : items) {
        int k = count;
        int mul = 1;

        while (k > 0) {
            int take = std::min(mul, k);
            int total_value = take * value;
            int total_weight = take * weight;

            for (int j = S; j >= total_weight; --j) {
                dp[j] = std::max(dp[j], dp[j - total_weight] + total_value);
            }

            k -= take;
            mul <<= 1; // multiply by 2
        }
    }

    return *std::max_element(dp.begin(), dp.end());
}

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

    std::vector<std::tuple<int, int, int>> items(N);
    for (int i = 0; i < N; ++i) {
        int v, w, k;
        std::cin >> v >> w >> k;
        items[i] = {v, w, k};
    }

    std::cout << knapsack(S, items) << '\n';
    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...