背包(0-1)问题

∥☆過路亽.° 提交于 2019-12-09 18:18:07

背包容量是C,可容纳N件商品,每件商品要么放要么不放,商品的重量数组W[ ],价值数组V[ ]。

通过动态规划算法,建立矩阵M[N][C]。

M[i][j]的含义为,往背包里放从0-i的物品的最大价值,j为背包容量。

M[i][j]的有两种选择:一是,不放当前物品i,M[i-1][j];二是,放当前物品i,则值为

V[i]+M[i-1][j-W[i]]。也就是当前物品的价值加上,背包容量为j-W[i],放0-i-1物品的最大价值。

矩阵里的每个值都是子问题的最优解,也就是背包在容量为j,容纳物品为0-i的最大价值。

 

还有一个问题,如何判定装入了哪个物品,由矩阵生成过程,可以知道,当M[i][j] != M[i-1][j]时,放入了物品i。以此类推,可以得到所有放入背包中的物品。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!