Submission #1258912

#TimeUsernameProblemLanguageResultExecution timeMemory
1258912sumu16Knapsack (NOI18_knapsack)C++20
100 / 100
132 ms11564 KiB
#include <bits/stdc++.h> #define int long long using namespace std; int32_t main() { int S, N; cin >> S >> N; vector<int>val(N); vector<int>wt(N); vector<int>k(N); map<int, vector<int>>m; for(int i = 0; i<N; ++i) { cin >> val[i] >> wt[i] >> k[i]; int limit = min(S/wt[i], k[i]); for(int j = 1; limit>0; j<<=1) { int p = min(j, limit); int weight = p*wt[i]; int value = p*val[i]; m[weight].push_back(value); limit-=p; } } vector<pair<int, int>>final_items; for(auto& [w, vals]: m) { int cnt = S/w; int sz = vals.size(); if(sz>cnt) { sort(vals.begin(), vals.end(), greater<>()); vals.resize(cnt); } for(int it : vals) { final_items.push_back({w,it}); } } vector<int>dp(S+1, 0); for(auto& [it1, it2] : final_items) { for(int j = S; j>=it1; --j) { dp[j] = max(dp[j], dp[j-it1] + it2); } } cout << dp[S]; 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...