1.2算法研究-01背包问题

来源:互联网 发布:painttool sai mac 编辑:程序博客网 时间:2024/05/21 17:42

刚刚理解了动态规划,趁热打铁,理解下01背包问题。

度娘真是个好东西,这种经典问题,给的推送,都是点击量比较高的,问题说的也比较好。从别的博客搬过来个链接:http://blog.csdn.net/mu399/article/details/7722810讲的还是不错的。

另外加上写字节的理解。链接里的博主说的不错,理解01背包问题,就是理解那张表。我现在用自己的理解叙述下。

01背包问题,先解决,承重1到V,只放物品A,所蕴含的最大价值和承重1-V分别是什么个映射关系。处理完后,同样的问题,放物品A和B,然后还能得到映射关系。最后得到放物品ABCD...的最大价值。

01背包问题依旧是动态规划问题。他等效到上面表述的问题之后,就变的好理解了。

01背包的状态转换方程 f[i,j] = Max{ f[i-1,j-Wi]+Pi( j >= Wi ), f[i-1,j] }。

f[i,j]表示在前i件物品中选择若干件放在承重为 j 的背包中,可以取得的最大价

Pi表示第i件物品的价值

即,分两步走,考虑Vi承重时,能放ABCD,最大价值。等于求,我到底要不要放D。不放D,则最大价值是,Vi承重下,ABC的最大价值(已经在之前算得);放D,则最大价值是Vi-VD的承重下,ABC的最大价值(之前也算得),两个谁大就选哪个方案。至此,完成其中某一步决策。

理解的关键点是:我到底放不放D。放or不放,两个值,取大的。


另外的关键就是,如何把问题转换为01背包问题,才是难点。

原创粉丝点击