Submission #1203908

#TimeUsernameProblemLanguageResultExecution timeMemory
1203908julia_08Knapsack (NOI18_knapsack)C++20
100 / 100
37 ms2888 KiB
#include <bits/stdc++.h> #define int long long using namespace std; const int MAXN = 2e3 + 10; int dp[MAXN]; vector<pair<int, int>> group[MAXN]; vector<int> weights[MAXN]; int32_t main(){ cin.tie(0)->sync_with_stdio(0); int s, n; cin >> s >> n; int max_w = 0; for(int i=1; i<=n; i++){ int v, w, k; cin >> v >> w >> k; group[w].push_back({v, k}); max_w = max(max_w, w); } for(int i=1; i<=max_w; i++){ sort(group[i].begin(), group[i].end()); int sz = 0; while(sz < (s / i) && !group[i].empty()){ if(group[i].back().second == 0){ group[i].pop_back(); continue; } weights[i].push_back(group[i].back().first); group[i].back().second --; sz ++; } } for(int i=1; i<=max_w; i++){ for(auto v : weights[i]){ for(int j=s; j>=0; j--){ if(i <= j) dp[j] = max(dp[j], dp[j - i] + v); } } } 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...