0-1背包问题(动态规划)
问题描述 n个物品和1个背包。对物品i,其价值为vi,重量为 wi,其价值为vi,背包容量为W。如何选取物品装入背包,使背包中所装入的物品的总价值最大? 数据结构的选择 数组w[n]来存放n个物品的重量; 数组v[n]来存放n个 物品的价值; 背包重量为W, 数组m[n+1][W+1]存放每次迭代执行结果; 数组x[n]用来存放所装入背包的物品状态 算法实现与测试 代码实现 package backpack ; import java . util . Scanner ; public class Backpack { /** * 动态规划算法实现 * @param v 存放n个 物品的价值数组 * @param w 存放n个物品的重量数组 * @param W 背包容量 * @param m 存放每次迭代执行结果 */ public static void knapsack ( int [ ] v , int [ ] w , int W , int [ ] [ ] m ) { int n = v . length ; //装入为0,初始化 for ( int i = 0 ; i < n + 1 ; i ++ ) m [ i ] [ 0 ] = 0 ; //背包内没有物品时初始化 for ( int j = 0 ; j < W + 1 ; j ++ ) m [ 0 ] [ j ]