Submission #1291868

#TimeUsernameProblemLanguageResultExecution timeMemory
1291868hynmjKnapsack (NOI18_knapsack)C++20
0 / 100
147 ms99812 KiB
#include <bits/stdc++.h> #define int long long using namespace std; const int INF = 1e18; int dp[2005], ndp[2005]; struct item { int v, w, k; }; void solve() { int s, n; cin >> s >> n; vector<item> a(n); for (int i = 0; i < n; i++) { cin >> a[i].v >> a[i].w >> a[i].k; } for (int i = 0; i <= s; i++) { dp[i] = -INF; } dp[0] = 0; for (auto &it : a) { int w = it.w, v = it.v, k = it.k; for (int r = 0; r < w; r++) { deque<pair<int, int>> q; int cnt = 0; for (int i = r; i <= s; i += w, cnt++) { int b = dp[i] - cnt * v; while (!q.empty() && q.back().first <= b) q.pop_back(); q.push_back({b, cnt}); while (!q.empty() && q.front().second < cnt - k) q.pop_front(); ndp[i] = q.front().first + cnt * v; } } for (int i = 0; i <= s; i++) dp[i] = max(dp[i], ndp[i]); } int ans = 0; for (int i = 0; i <= s; i++) ans = max(ans, dp[i]); cout << ans; } signed main() { ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); int t = 1; cin >> t; for (int i = 1; i <= t; i++) { // cout << "Case #" << i << ':' << ' '; solve(); cout << 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...