模板多重背包
Posted lovezxy520
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板多重背包相关的知识,希望对你有一定的参考价值。
二进制优化
#include<iostream> #include<cstdio> #include<algorithm> #include<cstdlib> #include<cmath> using namespace std; const int maxn = 25000; const int maxm = 2005; int dp[maxn], vv, s[maxm], v1[maxm], w1[maxm]; int v2[maxn], w2[maxn]; int cnt, n; int main() { cin >> n >> vv; for(int i = 1; i <= n; i++) cin >> v1[i] >> w1[i] >> s[i]; for(int i = 1; i <= n; i++) { for(int j = 1; j <= s[i]; j <<= 1) { v2[++cnt] = j*v1[i]; w2[cnt] = j*w1[i]; s[i] -= j; } if(s[i]) { v2[++cnt] = s[i]*v1[i]; w2[cnt] = s[i]*w1[i]; } } for(int i = 1; i <= cnt; i++) for(int j = vv; j >= v2[i]; j--) dp[j] = max(dp[j], dp[j-v2[i]]+w2[i]); cout << dp[vv]; return 0; }
以上是关于模板多重背包的主要内容,如果未能解决你的问题,请参考以下文章
动态规划背包问题总结:01完全多重与其二进制优化分组背包 题解与模板