Submission #1298277

#TimeUsernameProblemLanguageResultExecution timeMemory
1298277pucam20102Knapsack (NOI18_knapsack)C++20
100 / 100
38 ms3032 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<pair<int, long long>>> groups(S + 1); for (int i = 0; i < N; ++i) { long long v, w, k; cin >> v >> w >> k; if (w <= S && w > 0) { k = min(k, (long long)S / w); if (k > 0) groups[w].push_back({(int)v, k}); } } vector<long long> dp(S + 1, 0); for (int w = 1; w <= S; ++w) { if (groups[w].empty()) continue; sort(groups[w].rbegin(),groups[w].rend()); vector<int> values; for (auto &p : groups[w]) { int val = p.first; long long cnt = p.second; for (int t = 0; t < cnt && (int)values.size() < S / w; ++t) { values.push_back(val); } } sort(values.rbegin(), values.rend()); for (int val : values) { for (int cap = S; cap >= w; --cap) { dp[cap] = max(dp[cap], dp[cap - w] + val); } } } cout << dp[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...