您的位置:首页 > 其它

[总结] 动态规划部分总结

2018-03-14 09:25 155 查看

动态规划部分总结

也许很多人会问,DP是什么?

在我看来,DP就是一个解决多阶段决策过程问题的方法

也就是,在决策之间没有影响时,如何获得一个全局最优解(最优子结构)

这也是把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解

这就将全局最优解化为了单次最优解

貌似这就是阶段版贪心?

OKOK,大概就是这样了

我才不会告诉你当初差点被DP劝退呢

1 线性DP

线性DP也就是最基础的DP,我们利用状态间的线性关系去寻找最优解

这个的状态比较容易转移,比较好想

题目:

导弹拦截

2 区间DP

所谓区间DP,顾名思义就是在一段区间上的动态规划。还应该符合在区间上操作的特点。我的理解是往往会对区间进行合并操作。抑或是单个元素(可看成一个小区间)跨区间进行操作。

要得知一个大区间的情况,由于它必定是由从多个长度不一的小区间转移而来(转移情况未知),我们可以通过求得多个小区间的情况,从而合并信息,得到大区间。

显然,区间DP一般都是O(n3)O(n3)(枚举长度,枚举左节点,枚举切割点)

不过有一些区间DP可以优化成O(n2)O(n2),要用一个叫做“四边形不等式”的东西进行优化,后面会讲

区间DP的状态也很容易转移,比较好想

题目:

能量项链

[SDOI2008]石子合并

3 树型DP

顾名思义,树型动态规划就是在“树”的数据结构上的动态规划,平时的动态规划都是线性的或者是建立在图上的,线性的动态规划有二种方向既向前和向后,相应的线性的动态规划有二种方法既顺推与逆推,而树型动态规划是建立在树上的,所以也相应的有二个方向:根->叶子 or 叶子->根

因为树是一个满足最优子结构的数据结构,也本身就具有递归性 ,如此优美当然要用来DP啊,所以说树型DP的转移方程一般较为直观

但是,树型DP的状态划分极其难想,细节多(什么父亲,儿子,兄弟什么的…)

而且,状态转移方程是直观,但是要想出转移方程还是很难的

题目:

Computer

Godfather

4 数位DP*

5 状压DP

状压DP是通过用01串来枚举状态并且进行转移,一般的,我们用0表示不选,1表示选,这样一共有O(2n)O(2n)种状态

由于状压DP状态数较多,所以一般用于nn较小的情况,应该还是比较容易看出来的(雾~

题目:

想到了再更…

6 概率与期望DP

一般来说,概率与期望DP中没有只有转移,没有规划,因为每个事件都是由概率组成的,那么最终解就是由所有事件组成的概率集

emm,这里的题目一般都很恶心,每个点都会有多种状态转移叠加而来,要是实在做不出了,找规律一般也是可行的哦

[NOIP2016]换教室

[HNOI2015]亚瑟王

7 优化

DP的转移一般都要遍历之前有过的所有状态,有时候因为状态太多而导致超时,但是在这些状态中有些状态其实是根本不可能被选中的,所以我们就可以利用各种各样的优化去将这些状态去除掉,这就是DP优化的真谛!

7.1 斜率优化

强烈安利博客

自己写的,感觉很通俗易懂

题目:

[HNOI2008]玩具装箱toy

[APIO2010]特别行动队

[APIO2014]序列分割

7.2 四边形不等式*

7.3 二进制优化*

7.4 单调性优化*

7.5 矩阵优化*

剩下不会的慢慢填坑吧QAQ

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: