제출 #1345300

#제출 시각아이디문제언어결과실행 시간메모리
1345300martin01Knapsack (NOI18_knapsack)C++20
73 / 100
1095 ms2756 KiB
#include <bits/stdc++.h>

int64_t s, n;

std::vector<std::array<int64_t,3>> v;

const int64_t maxv = 2001;
std::array<int64_t,maxv> dp;

int main() {

    std::cin >> s >> n;
    v.resize(n); for (auto& x : v) std::cin >> x[0] >> x[1] >> x[2];

    std::fill(dp.begin(), dp.end(), -1);
    dp[0] = 0;

    for (int64_t item = 0; item < n; item++) {

        int64_t V = v[item][0];
        int64_t W = v[item][1];
        int64_t K = v[item][2];

        for (int64_t i = s-W; i >= 0; i--) {
            if (dp[i] == -1) continue;

            for (int64_t j = 1; i + j*W <= s; j++) { if (j > K) break;
                dp[i+j*W] = std::max(dp[i+j*W], dp[i] + j*V);
            }
        }
    }

    int64_t sol = 0; for (int64_t i = 0; i < maxv; i++) sol = std::max(sol, dp[i]);
    std::cout << sol << "\n";
}
#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...