Submission #1184870

#TimeUsernameProblemLanguageResultExecution timeMemory
1184870Godgift42Knapsack (NOI18_knapsack)C++20
100 / 100
100 ms34404 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; int main(){ int n,s; cin >> s >> n; map<int,vector<pair<ll,int>>> bw; for(int i=0;i<n;i++){ ll v; int w,k; cin >> v >> w >> k; if(w<=s and k>0)bw[w].push_back({v,k}); } vector<vector<ll>> dp(bw.size()+1,vector<ll>(s+1,-1)); dp[0][0]=0; int at=0; ll ans=0; for(auto &[w,items]:bw){ at++; sort(items.begin(),items.end(),greater<pair<ll,int>>()); for(int l=0;l<=s;l++){ dp[at][l]=dp[at-1][l]; int cr=0; int id=0; int cur=0; ll pr=0; while(id<items.size() and (cr+1)*w<=l){ cr++; cur++; pr+=items[id].first; if(dp[at-1][l-cr*w]!=-1)dp[at][l]=max(dp[at][l],dp[at-1][l-cr*w]+pr); if(cur==items[id].second){ cur=0; id++; } } ans=max(ans,dp[at][l]); } } cout << *max_element(dp.back().begin(), dp.back().end()) << endl; }
#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...