完全背包问题的改进实现

来源:互联网 发布:无损音乐下载 知乎 编辑:程序博客网 时间:2024/06/08 11:16

完全背包问题就是每个东西都不限数量的,01背包问题呢,则是限制数量为1

对于改进了的01背包问题,也有改进了的背包问题,他们的想法上是一致的,只不过实现上有了一点差别


也是比较简单的,亲手debug一下吧


/** * 完全背包问题<br/> *  * f[v]=max{f[w],f[w-w[i]]+v[i]}<br/> * 也就是f[i][v] = max{f[w],f[w-w[i]]+v[i]}<br/> * 时间复杂度O(WN)<br/> * 空间复杂度O(W)<br/> *  * @author Joeson *  */public class CompletePack{public static void main(String[] args){int[] value = new int[] { 12, 10, 20, 35, 20 };int[] weight = new int[] { 2, 1, 3, 2, 2 };int W = 5;System.out.println(knapsack(value, weight, W));}public static int knapsack(int[] v, int[] w, int W){int[] tmp = new int[W + 1];for (int i = 0; i < v.length; i++)completePack(tmp, v[i], w[i], W);return tmp[W];}/** *  * @param tmp *            辅助数组 * @param value *            当前v[i]的价值 * @param weight *            当前w[i]的重量 * @param W *            总重量 */public static void completePack(int[] tmp, int value, int weight, int W){for (int i = 0; i <= W; i++){tmp[i] = i - weight >= 0 ? Math.max(tmp[i], tmp[i - weight] + value) : tmp[i];}}}


0 0
原创粉丝点击