Submission #631035

#TimeUsernameProblemLanguageResultExecution timeMemory
631035thienbao1602Knapsack (NOI18_knapsack)C++17
100 / 100
98 ms34312 KiB
#include <bits/stdc++.h> #define ll long long using namespace std; const ll inf = -1e15; int S, n; void solve() { cin >> S >> n; map<ll, vector<pair<ll, ll>>> weight; for(int i=0; i<n; i++) { ll val, w, sl; cin >> val >> w >> sl; weight[w].push_back({val, sl}); } vector<vector<ll>> ans((int)weight.size() + 1, vector<ll>(S+1, inf)); ans[0][0] = 0; int id = 1; for(auto [w, items] : weight) { sort(items.begin(), items.end(), greater<pair<ll, ll>>()); for(int i=0; i<=S; i++) { ans[id][i] = ans[id-1][i]; ll sl = 0, profit = 0, used = 0, type_at = 0; while((sl+1) * w <= i && type_at < (int)items.size()) { sl++; profit += items[type_at].first; if (ans[id-1][i-sl*w] != inf) { ans[id][i] = max(ans[id][i], ans[id-1][i-sl*w] + profit); } used++; if (used == (ll)items[type_at].second) { used = 0; type_at++; } } } id++; } ll sol = 0; for(int i=0; i<=S; i++) { sol = max(sol, ans[(int)weight.size()][i]); } cout << sol; //cout << *max_element(ans.back().begin(), ans.back().end()); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); solve(); 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...