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

动态规划部分总结

也许很多人会问,DP是什么?
在我看来,DP就是一个解决多阶段决策过程问题的方法
也就是,在决策之间没有影响时,如何获得一个全局最优解(最优子结构)
这也是把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解
这就将全局最优解化为了单次最优解
貌似这就是阶段版贪心?
OKOK,大概就是这样了

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

1 线性DP

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

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

题目:
导弹拦截

2 区间DP

所谓区间DP,顾名思义就是在一段区间上的动态规划。还应该符合在区间上操作的特点。我的理解是往往会对区间进行合并操作。抑或是单个元素(可看成一个小区间)跨区间进行操作。
要得知一个大区间的情况,由于它必定是由从多个长度不一的小区间转移而来(转移情况未知),我们可以通过求得多个小区间的情况,从而合并信息,得到大区间。
显然,区间DP一般都是 O(n3) O ( n 3 ) (枚举长度,枚举左节点,枚举切割点)
不过有一些区间DP可以优化成 O(n2) O ( n 2 ) ,要用一个叫做“四边形不等式”的东西进行优化,后面会讲

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

题目:
能量项链
[SDOI2008]石子合并

3 树型DP

顾名思义,树型动态规划就是在“树”的数据结构上的动态规划,平时的动态规划都是线性的或者是建立在图上的,线性的动态规划有二种方向既向前和向后,相应的线性的动态规划有二种方法既顺推与逆推,而树型动态规划是建立在树上的,所以也相应的有二个方向:根->叶子 or 叶子->根
因为树是一个满足最优子结构的数据结构,也本身就具有递归性 ,如此优美当然要用来DP啊,所以说树型DP的转移方程一般较为直观

但是,树型DP的状态划分极其难想,细节多(什么父亲,儿子,兄弟什么的…)
而且,状态转移方程是直观,但是要想出转移方程还是很难的

题目:
Computer
Godfather

4 数位DP*

5 状压DP

状压DP是通过用01串来枚举状态并且进行转移,一般的,我们用0表示不选,1表示选,这样一共有 O(2n) O ( 2 n ) 种状态
由于状压DP状态数较多,所以一般用于 n n <script type="math/tex" id="MathJax-Element-15">n</script>较小的情况,应该还是比较容易看出来的(雾~

题目:
想到了再更…

6 概率与期望DP

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

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

7 优化

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

7.1 斜率优化

强烈安利博客
自己写的,感觉很通俗易懂

题目:
[HNOI2008]玩具装箱toy
[APIO2010]特别行动队
[APIO2014]序列分割

7.2 四边形不等式*

7.3 二进制优化*

7.4 单调性优化*

7.5 矩阵优化*

剩下不会的慢慢填坑吧QAQ
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值