黑白灰网站,网站设计网站优化公司,简答电子商务网站建设流程,网站的维护和更新现有四个物品#xff0c;小偷的背包容量为8#xff0c;怎么可以偷得价值较多的物品
如:
物品编号#xff1a; 1 2 3 4
物品容量#xff1a; 2 3 4 5
物品价值#xff1a; 3 4 5 8
记f(k,w) ,当背包容量为w,可以偷k件物品…现有四个物品小偷的背包容量为8怎么可以偷得价值较多的物品
如:
物品编号 1 2 3 4
物品容量 2 3 4 5
物品价值 3 4 5 8
记f(k,w) ,当背包容量为w,可以偷k件物品所能偷到的最大价值
以f(4,8)为列记录每次偷取物品有两种情况 偷//不偷如果偷取出物品的价值并减少对应背包的容量如果不偷则不需要取出价值也不需要减去对应的容量 依次找到偷取物品为0个或者容量不够时为止。 由上述递推可得下面公式 代码实现 package 算法;public class 背包 {public static void main(String[] args) {int[][] f new int[5][9];int[] w new int[]{0, 2, 3, 4, 5};int[] v new int[]{0, 3, 4, 5, 8};for (int i 1; i 5; i) {for (int j 1; j 9; j) {if (w[i] j) {f[i][j] f[i - 1][j];} else {f[i][j] Math.max(f[i - 1][j], f[i - 1][j - w[i]] v[i]);}}}for (int i 0; i 5; i) {for (int j 0; j 9; j) {System.out.println(i j f[i][j]);}}}}