采用Dynamic Programming method to solve 0-1 Knapsack Problem.
发布时间
阅读量:
阅读量
动态规划法解决0/1背包问题
动态规划法:
将需要解决的复杂问题拆解为多个相互关联且具有重叠性质的子问题,每个子问题对应于决策流程中的一个特定阶段。
该方法主要包括以下三个步骤:
1)对问题进行细分,形成若干子问题
2)建立动态规划函数以描述各阶段之间的关系
3)通过表格填充的方式逐步求解
借助上述动态规划流程,能够有效获取问题的最优解。
0/1背包问题描述:
假设有n件物品与一个容量为C的背包,其中第i件物品(1<=i<=n)具有对应的重量wi和价值vi。对于每一件物品而言,仅存在两种选择方式:将其装入背包或不装入。目标是计算在不超过背包容量的前提下,所能获得的最大总价值,并确定具体哪些物品被选中以实现这一最大价值。
测试实例:
共有5件物品,其重量依次为:2,2,6,5,4;对应的价值分别为:6,3,5,4,6;背包的最大承载能力设定为10。
w[n]用于存储n个物品的重量信息,v[n]则用于记录n个物品的价值数据,C表示背包的容量。数组V[n+1][C+1]用于保存迭代过程中的计算结果,而数组x[n]则用于标识哪些物品被放入了背包中,其中数值1代表该物品被选中装入,0表示未被选中。需特别注意的是,在本实现中x[n]、w[n]、v[n]数组的索引均从1开始计数,而非从0开始。
0/1背
全部评论 (0)
还没有任何评论哟~
