摘要: 学长给的代码:可作参考void pack01(int a, int b) //0 - 1 背包 { int i; for(i = Sum; i >= a; i ++) dp[i] = maxz(dp[i-a] + b, dp[i]); } void packcmp(int a, int b) //完全背包 { int i ; for(i = a; i = Sum) { packcmp(w[i], g[i]); } else { int k = 1; int amount = num[i]; while( k < amount) ... 阅读全文
posted @ 2013-07-18 18:41 cnwsycf 阅读(277) 评论(0) 推荐(0)
摘要: 刚刚学完简单的DP,现在在接触背包问题了,然后学长们推荐我看下这篇文章,所以转载过来了。 - -希望对大家有帮助吧。P01: 01背包问题题目有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生出来的。 阅读全文
posted @ 2013-07-18 10:31 cnwsycf 阅读(1165) 评论(0) 推荐(1)