Submission #1257302

#TimeUsernameProblemLanguageResultExecution timeMemory
1257302luvletturrKnapsack (NOI18_knapsack)C++20
100 / 100
179 ms245192 KiB
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int S, N; cin >> S >> N; vector<vector<array<int, 2>>> items(S + 1); for (int i = 1; i <= N; ++i) { int v, w, k; cin >> v >> w >> k; items[w].push_back({v, k}); } vector<array<int, 2>> newitems = {{0, 0}}; for (int i = 1; i <= S; ++i) { sort(items[i].begin(), items[i].end(), [&](const array<int, 2> a, const array<int, 2> b) { return a[0] > b[0]; }); int cur = 0; for (auto x : items[i]) { int p = min((S / i) - cur, x[1]); for (int j = 1; j <= p; ++j) { newitems.push_back({x[0], i}); } cur += p; if (cur == (S / i)) break; } } int NN = newitems.size() - 1; vector<vector<int64_t>> DP(NN + 1, vector<int64_t>(S + 1)); for (int i = 1; i <= NN; ++i) { for (int j = 1; j <= S; ++j) { if (j >= newitems[i][1]) { DP[i][j] += max(DP[i][j], DP[i - 1][j - newitems[i][1]] + newitems[i][0]); } DP[i][j] = max(DP[i][j], DP[i - 1][j]); } } cout << DP[NN][S] << '\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...