CDQ分治与斜率优化DP——学习笔记
2017-02-17 12:03
239 查看
我们知道当斜率优化DP中的点的x坐标不单调时,需要splay来维护凸壳,但是代码量比较大,容易写挂。
我们还有一种神奇的做法:CDQ分治。
先把n个状态排成一个序列。考虑一个分治过程solve(L,R),每次分成[L,mid],[mid+1,R]两部分。
显然对于fi只和1~i-1有关,所以我们solve(L,mid)递归求解,即可得到[L,mid]的所有f值。
现在我们需要考虑用[L,mid]中求出的值去更新[mid+1,R]中的待求的f:
这个子问题已经是静态的了,然后我们就可以排序了。
对于[L,mid]中的所有决策点按x排序,然后就可以线性构造出这个凸壳。
再对[mid+1,R]中的状态按斜率排序。这样又能线性在凸壳中找到最优点。是不是很妙啊。
总复杂度O(Nlog^2N)。虽然多了一个log, 但是编程复杂度降低了很多,对于写不动大数据结构的老年人选手是很好的选择。
CDQ分治的这种动态转静态的思想特别好,许多数据结构题都适用。
我们还有一种神奇的做法:CDQ分治。
先把n个状态排成一个序列。考虑一个分治过程solve(L,R),每次分成[L,mid],[mid+1,R]两部分。
显然对于fi只和1~i-1有关,所以我们solve(L,mid)递归求解,即可得到[L,mid]的所有f值。
现在我们需要考虑用[L,mid]中求出的值去更新[mid+1,R]中的待求的f:
这个子问题已经是静态的了,然后我们就可以排序了。
对于[L,mid]中的所有决策点按x排序,然后就可以线性构造出这个凸壳。
再对[mid+1,R]中的状态按斜率排序。这样又能线性在凸壳中找到最优点。是不是很妙啊。
总复杂度O(Nlog^2N)。虽然多了一个log, 但是编程复杂度降低了很多,对于写不动大数据结构的老年人选手是很好的选择。
CDQ分治的这种动态转静态的思想特别好,许多数据结构题都适用。
相关文章推荐
- 斜率优化DP学习笔记
- [斜率优化DP]【学习笔记】【更新中】
- 斜率优化dp学习笔记
- 斜率优化dp 学习笔记
- 斜率优化 [学习笔记]
- [HNOI2008]玩具装箱-DP斜率优化-单调队列-学习笔记
- 【笔记篇】斜率优化dp(三) APIO特别行动队
- 【笔记篇】斜率优化dp(五) USACO08MAR土地购(征)买(用)Land Acquisition
- 【笔记篇】斜率优化dp(一) HNOI2008玩具装箱
- 斜率优化学习笔记
- hdu 3507 斜率优化dp 入门学习
- 学习笔记--斜率优化
- 斜率优化dp专题学习
- bzoj1010[HNOI2008] 玩具装箱toy(带斜率优化学习笔记)
- 【笔记篇】斜率优化dp(四) ZJOI2007仓库建设
- 【笔记篇】单调队列优化dp学习笔记&&luogu2569/bzoj1855股票交♂易
- 斜率优化学习笔记
- 斜率优化学习笔记
- [DP]斜率优化学习小结
- 【笔记篇】斜率优化dp(二) SDOI2016征途