Submission #1164659

#TimeUsernameProblemLanguageResultExecution timeMemory
1164659crispxxKnapsack (NOI18_knapsack)C++20
73 / 100
1096 ms1620 KiB
#include <bits/stdc++.h> using namespace std; const int INF = 2e9; void knapsackMonotoneQueue(int n, int W, vector<int>& w, vector<int>& v, vector<int>& k) { vector<int> f(W + 1); for (int i = 0; i < n; ++i) { int wi = w[i], vi = v[i], ki = k[i]; vector<int> new_f = f; for (int y = 0; y < wi; ++y) { deque<array<int, 2>> dq; for (int x = 0; x * wi + y <= W; ++x) { int idx = x * wi + y; int G = f[idx] - x * vi; while (!dq.empty() && G >= f[dq.back()[0]] - dq.back()[1] * vi) dq.pop_back(); dq.push_back({idx, x}); if (!dq.empty() && x - dq.front()[1] > ki) dq.pop_front(); new_f[idx] = f[dq.front()[0]] + (x - dq.front()[1]) * vi; } } swap(f, new_f); } cout << f[W] << endl; } int main() { int n, W; cin >> W >> n; vector<int> w(n), v(n), k(n); for (int i = 0; i < n; ++i) cin >> v[i] >> w[i] >> k[i]; knapsackMonotoneQueue(n, W, w, v, k); 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...