제출 #1184857

#제출 시각아이디문제언어결과실행 시간메모리
1184857Godgift42Knapsack (NOI18_knapsack)C++20
0 / 100
1 ms328 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)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<int,int>>()); for(int l=0;l<=s;l++){ dp[at][l]=dp[at-1][l]; if(w<=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 << ans << "\n"; }
#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...