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]的物体(包含两个部分,一部分是替换空物体占的重量,

               一部分是实际物体的重量可能是多个物体的组合)。

       通过公式的循环就可以解出答案来。数组最后一个就是答案。

总结:动态规划是使用子问题求解更大空间的问题,子问题用空间存储一劳永逸。

posted @ 2011-11-26 09:32  菜鸟哥  阅读(89)  评论(0)    收藏  举报