Submission #1281186

#TimeUsernameProblemLanguageResultExecution timeMemory
1281186AtinaRKnapsack (NOI18_knapsack)C++20
100 / 100
112 ms17496 KiB
#include <bits/stdc++.h> using namespace std; int s,n; const int MAX=1e5+10; map<int,vector<pair<int,int> > > by_weight; int main() { cin>>s>>n; for(int i=0; i<n; i++) { int weight,value,quantity; cin>>value>>weight>>quantity; by_weight[weight].push_back({value,quantity}); } int dp[by_weight.size()+1][s+1]; memset(dp,-1,sizeof(dp)); dp[0][0]=0; int idx=1; int ans=0; for(auto &[w, items]:by_weight) { sort(items.begin(),items.end()); reverse(items.begin(),items.end()); for(int cap=0; cap<=s; cap++) { dp[idx][cap]=dp[idx-1][cap]; int cp=0; int cnt=0; int total=0; int sum=0; while((cp+1)*w<=cap && cnt<items.size()) { cp++; sum+=items[cnt].first; if(dp[idx-1][cap-cp*w]!=-1) { dp[idx][cap]=max(dp[idx-1][cap-cp*w]+sum,dp[idx][cap]); } total++; if(total==items[cnt].second) { total=0; cnt++; } ans=max(ans,dp[idx][cap]); } } idx++; } cout<<ans<<endl; 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...