Submission #1314290

#TimeUsernameProblemLanguageResultExecution timeMemory
1314290yadav_nikhil1430Knapsack (NOI18_knapsack)C++20
100 / 100
134 ms11092 KiB
#include<bits/stdc++.h> using namespace std; #define int long long signed main() { int W,n,sum,i,j,msb; cin>>W>>n; vector<int> v(n),w(n),k(n),dp(W+1,0); vector<vector<int>> a(W+1); for(int i=0;i<n;i++) { cin>>v[i]>>w[i]>>k[i]; msb=31;j=0; sum=0; while(!((k[i]>>msb)&1)) msb--; while(j<msb) { if(w[i]*(1LL<<j)<=W) a[w[i]*(1LL<<j)].emplace_back(v[i]*(1LL<<j)); sum+=(1LL<<j); j++; } if(k[i]-sum>0 && w[i]*(k[i]-sum)<=W) a[w[i]*(k[i]-sum)].emplace_back(v[i]*(k[i]-sum)); } for(int i=1;i<=W;i++) { sort(a[i].begin(),a[i].end()); reverse(a[i].begin(),a[i].end()); for(int ww=W;ww>=1;ww--) { sum = 0; for(int j=0;j<a[i].size()&&i*(j+1)<=ww;j++) { sum+=a[i][j]; dp[ww] = max(dp[ww],dp[ww-i*(j+1)]+sum); } } } int ans=0; for(auto&x:dp) ans = max(ans,x); cout<<ans; 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...