多重背包(二进制优化)
来源:互联网 发布:海岛奇兵建筑升级数据 编辑:程序博客网 时间:2024/06/06 23:53
马上就要轻院校赛了,没时间了,下面是网上找的多重背包,感觉很好
void ZeroOnePack(int cost, int weight, int n) {for (int i = n; i >= cost; i--)dp[i] = max(dp[i], dp[i - cost] + weight);}void CompletePack(int cost, int weight, int n) {for (int i = cost; i <= n; i++)dp[i] = max(dp[i], dp[i - cost] + weight);}void MultiPack(int c[], int w[], int num[], int n, int m) {//c[]重量,w[]价值,n物品数,m容量,memset(dp, 0, sizeof(dp));for (int i = 1; i <= n; i++) {if (num[i] * c[i] > m)CompletePack(c[i], w[i], m);else {int k = 1;while (k < num[i]) {ZeroOnePack(k*c[i], k*w[i], m);num[i] -= k;k <<= 1;}ZeroOnePack(num[i] * c[i], num[i] * w[i], m);}}}poj1276是一道多重背包题 by wjqin
const int maxn = 125007;int w[55], num[55];int dp[maxn];void ZeroOnePack(int c, int w, int v, int dp[]) {for (int j = c; j >= w; --j)dp[j] = max(dp[j], dp[j - w] + v);}void CompletePack(int c, int w, int v, int dp[]) {for (int j = w; j <= c; ++j)dp[j] = max(dp[j], dp[j - w] + v);}void multiPack(int n, int c, int w[], int num[], int dp[]) {fill(dp, dp + maxn, 0);for (int i = 1; i <= n; ++i) {if (num[i] * w[i] > c) {CompletePack(c, w[i], w[i], dp);}else {int k = 1;while (k < num[i]) {ZeroOnePack(c, k * w[i], k * w[i], dp);num[i] -= k;k <<= 1;}ZeroOnePack(c, num[i] * w[i], num[i] * w[i], dp);}}}
wa到不知道为啥子,memset(dp, 0,sizeof(dp));有时并未将dp数组中的值赋为0(可能与sizeof有关), fill()更靠谱些,
big event int hdu
0 0
- 多重背包(二进制优化)
- 多重背包(二进制优化)
- 多重背包(二进制优化)
- 多重背包二进制优化
- 多重背包二进制优化
- 多重背包二进制优化
- 多重背包--二进制优化
- 动规-混合多重背包(多重背包二进制优化)
- poj1014 dividing(多重背包+二进制优化)
- 多重背包模板解析 (二进制优化)
- HDU Dividing (多重背包+二进制优化)
- Coins(多重背包+二进制优化)
- hdu1059 Dividing(多重背包+二进制优化)
- hdu2844 Coins(多重背包+二进制优化)
- hdu1059 Dividing(多重背包+二进制优化)
- HDU1059:Dividing(多重背包二进制优化)
- 多重部分和问题(多重背包+二进制优化)
- hdu1059Dividing 多重背包二进制优化
- [Leetcode] 15. 3Sum
- 《从0到1》前十章学习摘录
- spark查询异常记录
- POJ1679 The Unique MST
- 浅谈页面性能优化
- 多重背包(二进制优化)
- KMP之循环节 hdu 3746
- springmvc 传值
- 001 hello world
- vim 命令 & intellij快捷键
- D
- 错误:_csv.Error: line contains NULL byte(已解决)
- 用jquery封装的手风琴特效插件
- Java数据结构与算法《二》简单排序