DP优化

总体思路:http://blog.csdn.net/wukonwukon/article/details/7894954

一、四边形不等式

  感觉四边形不等式用的时候是:利用第j-1层的dp[i][j-1]和dp[i+1][j-1]两个值的转移位置s[i][j-1],s[i+1][j-1]来约束 k 的枚举范围……从而降低时间复杂度。

  

  目前我做过的可以用四边形不等式的题都是区间DP的……如果有路过的神牛做过别的类型的请在评论区留言,万分感谢。

  学习: 赵爽论文《动态规划加速原理之四边形不等式》

  这一段的题目是看了下 shiwei408的总结

  题目:(个人感觉难度从低到高)

  1.石子合并(NOIP难度的石子合并就不用我找了吧……相信大家都写过$n \leq 100$的)

  2.HDOJ 3506 题解:http://www.cnblogs.com/Tunix/p/4319001.html

  3.HDOJ 3516 题解:http://www.cnblogs.com/Tunix/p/4318883.html

  4.POJ 1160 题解:http://www.cnblogs.com/Tunix/p/4316919.html

  5.HDOJ 3480 题解:http://www.cnblogs.com/Tunix/p/4318438.html

  6.HDOJ 2829 题解:http://www.cnblogs.com/Tunix/p/4317807.html

二、单调队列优化

UPD:2015-03-10 23:00:30

  单调队列优化一般可以用来优化动规方程类似$f[i]=max/min(f[k])+g[i] $的DP。

  那么应用的时候一般主要要考虑两个东西:

  1.将与$i$相关的部分分离出来,全部塞到$g[i]$这一项中,剩下的就是我们可以维护单调性的东西!(参考股票交易等题)

  2.转移范围,即$k$的取值范围!这也是所有动态规划中都很重要的一点……这里我们需要考虑队列中时刻维护着【当前阶段$i$的合法决策队列】,所以我们需要考虑每个元素进队的时机!以及队首元素出队的时机!避免某个当前无法转移的决策过早地将其他合法决策从队列中弹出来(由于单调性)(参见划区灌溉/Fence两题)

题目:(这次就直接粘题解了……)

1.滑动窗口

2.【HDOJ】【3415】Max Sum of Max-K-sub-sequence

3.【HDOJ】【3530】Subsequence

4.【BZOJ】【1855】【SCOI2010】/【HDOJ】【3401】股票交易

5.【BZOJ】【1986】【USACO 2004 Dec】/【POJ】【2373】划区灌溉

6.【POJ】【1821】Fence

7.【BZOJ】【2500】幸福的道路

三、斜率优化

  终于搞明白这个神奇的东西了……当初真是被这个和四边形愁死了……

  (UPD:2015-06-08 18:00:17 然而这个并不是完整的斜率优化sad)

  首先明确我们要做的事情:利用决策的单调性,减少决策数

  然后去看看论文吧……(其实感觉我把要写的东西都写在第一题的题解里了……)

  1.【BZOJ】【1096】【ZJOI2007】仓库建设

  2.【BZOJ】【1597】【USACO 2008 Mar】土地购买

  3.【BZOJ】【1911】【APIO2010】特别行动队commando

  4.【BZOJ】【1010】【HNOI2008】玩具装箱Toy

  5.【BZOJ】【3156】防御准备

  6.【BZOJ】【3437】小P的牧场

后记:感觉所谓的“维护凸壳”其实也就是维护某种单调性= =用单调队列就可以做(好吧只是其中一类)

posted @ 2015-03-06 18:42  Tunix  阅读(350)  评论(0编辑  收藏  举报