代码改变世界

随笔档案-2013年2月17日

动态规划模型2,01背包问题

2013-02-17 14:20 by Dr.Ray, 360 阅读, 收藏,
摘要: 01背包问题: 有n个物品,每个体积为v[1-n],问这些物品能否装满体积为b的背包,物品不能切分,形状因素忽略不计。求背包最小剩余空间。阶段:以v数组的下标划分状态:opt[]为0或1状态转移方程:opt[j] = opt[j - v[i]]思路: opt[b+1]代表体积为0~b的背包能否被装满,0否1能; 于是就要知道所有物品体积组合之和。 我理所因当想到用循环,多层循环强行组合不可能,因为循环层数不确定。 可以用两层循环如//key!,先记一个物品v1体积的opt[v1]=1,接着只要体积v2于之前出现过的体积v1加上另一个物品的体积则opt[v2]=1。 注意第二层必须用倒推,否则 阅读全文