0-1背包问题
动态规划是通过空间减少时间的算法,每次都存储一个求解的最优值,以后就可以使用这个结果不用再重复计算。
0-1背包问题中:
n是物体的个数,m是背包的总重量,w[i]是第i个物体的重量,p[i]是第i个物体的价值。
(1)定义一个数组c[n+1][m+1]用来存储物体的最大价值,如c[i][j]表示加入第i个物体容量为j时的最大价值是c[i][j]。
(2)数组初始化为零。
(3)c[i][0....m+1]的求解过程如下
a.公式:c[i][j]=max{c[i-1][j],c[i-1][j-w[i])+p[i])}
b.公式的意义是:计算不加入第i个物体,替换重量为w[i]的物体(包含两个部分,一部分是替换空物体占的重量,
一部分是实际物体的重量可能是多个物体的组合)。
通过公式的循环就可以解出答案来。数组最后一个就是答案。
总结:动态规划是使用子问题求解更大空间的问题,子问题用空间存储一劳永逸。

浙公网安备 33010602011771号