浅谈dp 动态规划(1)

来源:互联网 发布:运用python成为黑客 编辑:程序博客网 时间:2024/05/18 20:37

dp对于初学者来说会比较难以理解
作为一个蒟蒻,看到网上的很多文章都没有说得太浅显易懂,在这里解释一下:

dp的一个重要的思想就是继承!!

比如拿经典背包问题来举例
F[i][j]=min{F[i-1][j-v[i]]+w[i],F[i-1][j]}
这里面 表示不放当前物品,是由F[i-1][j]继承而来的
放当前物品,是由F[i-1][j-v[i]]+w[i]继承而来的
由于dp状态一般描述的满足当前状态下的最优解,于是便可以保证该算法的正确性。

在使用dp算法求解的时候,还需要考虑俩个重要的问题
(1)后效性
如果对于每一步决策(简单的说就是就好比这个物品你要还是不要,要几个),对于后面做哪种决策取得的权值不会有影响,那么可以考虑dp。
(2)最优子结构
dp一定要满足最优子结构特性,即dp为当前状态下的最优解,从而实现答案求解。

区分与贪心策略
为什么有的题贪心不可以解决呢?
原因是贪心只能保证是局部最优解,而无法保证全局最优解(不懂的同学们可以自己去试验一下有些特殊的经典01背包的数据)。

一般来说,dp都可以用dfs的记忆化搜索来实现,但是dfs的代码实现难度有时会高于dp。

0 0
原创粉丝点击