[总结] 动态规划部分总结
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
相关文章推荐
- ListView控件的Insert、Edit和Delete功能第三部分(自我总结)
- IdTcpServer 部分总结 (用户掉线的检测方法,控制用户量等)
- 总结出一些software必定会被问到的问题 C、C++部分
- Devexpress GridView部分常用操作总结 z
- 运维面经知识点总结--网络部分(1)
- 动态规划 总结
- 常量与变量的部分总结
- [黑马程序员]06[C语言]指针部分笔记总结-01
- 关于PHP的i18n(国际化)的一点总结(1)----gettext部分
- 2013.10.9赶集网技术笔试题部分总结
- 师兄面试总结编程部分解答之一
- Java核心技术及面试指南 面向对象部分的面试题总结以及答案
- 项目总结(Ajax+Struts+Spring+Hiberante+SQLServer2000) 第二部分
- C++ 有关于函数对象以及谓词部分练习以及知识点的总结
- linux调试错误原因总结(部分)
- C/C++部分库函数总结
- 部分扩展功能总结
- 算法竞赛入门经典第一章上机练习(部分)及总结
- 基金撰写经验总结(自己觉得有用的部分)
- 前端开发面试总结JavaScript部分