1 2 3 4 5 6 7 8 9 10 11 12
| 0-1背包问题算法的主要思想: 利用动态规划来解决,每次遍历到的第i个物品,利用w[i]和val[i]来确定是否需要将该物品放入背包中。 即对于给定的n个物品,设val[i]、w[i]分别为第i个物品的价值和重量,C为背包的容量,再令v[i][j] 表示在前i个物品中能够装入容量为j的背包中的最大价值。 计算公式: 1)v[i][0]=v[0][i]=0; // 表示表格的第一行和第一列都是0 2)当w[i]>j时,v[i][j]=v[i-1][j] // 当准备加入新增的商品的容量大于当前背包的容量时,就直接使用上一个单元格的装入策略 3)当j>=w[i]时,v[i][j]=max{v[i-1][j], val[i]+v[i-1][j-w[i]]} // 当准备加入的新增商品容量小于等于当前背包剩余容量时 在两者之间取最大值。v[i-1][j-w[i]] 装入i-1个商品时背包剩余容量的最大值。
粘贴代码如下:
|