单调队列优化DP
一般方程:
(val(i,j))是一个每一项只与(i)和(j)中的一个值有关的多项式,这是使用单调队列优化的基本条件,我们可以在外层循环为定值的时候,将方程中与(i)和与(j)有关的拆开,与(i)有关的为定值,随着(i)的变化,(j)的上下界发生变化,维护(val(i,j))的单调性,及时排除无用的决策,使得DP得以优化
[SCOI2010]股票交易
斜率优化DP
一般方程在单调队列的基础上,(val(i,j))中的多项式与(i,j)都有关,有二次项
如(dp(i)=max{dp(j)+a(su(i)-su(j))^2+b(su(i)-su(j))+c})
和(dp(i)=min{dp(j)+(su(i)+i-su(j)-j-L-1)^2})
先看第一个式子
将(-2asu(i))看作斜率,(su(j))为自变量,(dp(j)-asu^2(j)+bsu(j))为因变量,那么每一个决策可以看作是(-2asu(i)x+asu^2(i)+bsu(i)-dp(i)+c)这条直线上的一个点,由于斜率是固定的,且此例中点形成了一个上凸壳,用单调队列维护,最优决策是两个决策点之间斜率(slope)第一次小于(-2asu(i))时的前一个决策点。
另一例是同样的道理,最后需要维护的是一个下凸壳。
[APIO2010]特别行动队
[HNOI2008]玩具装箱
[ZJOI2007]仓库建设
[APIO2014]序列分割
四边形不等式优化DP
设(w(i,j))是定义在整数集合上的二元函数,对于定义域上的任意整数(a,b,c,d(aleq bleq cleq d))都有(w(a,d)+w(b,c)geq w(a,c)+w(b,d))则(w(i,j))满足四边形不等式
四边形不等式的另一个形式((a< b)):
一般方程:
定理:若函数(w(j,i))满足四边形不等式,则dp有决策单调性。
由此,我们可以将dp计算优化到(O(nlogn))
实现:
我们维护一个队列,维护整个决策数列,队列里的元素是一个三元组((j,l,r)),表示(i in [l,r])时决策点为(j),那么每次新算出来一个(dp(i))考虑其可以成为那些(dp(i'))的决策点,由于决策单调性,在队列里二分到一个位置,在此位置之后所有决策都没有当前的(i)优,并将(i)加入决策队列。
同时我们发现算完了(i)之后决策队列中([1,i-1])的决策就没用了,及时排除队首无用的决策,所以我们其实维护了以个单调队列。
[NOI2009]诗人小G
[POI2011]Lightning Conductor
二维四边形不等式优化区间DP
一般方程:
定理1:
如果此方程满足
1.(dp(i,i)=w(i,i)=0)
2.(w(i,j))满足四边形不等式
3.对于任意的(ale b le c le d)有(w(a,d) ge w(b,c))
那么(dp(i,j))也满足四边形不等式
定理2:
记(p(i,j))为(dp(i,j))取到最小值的(k)值,如果(dp(i,j))具有四边形不等式,那么对于任意的(i<j),有(p(i,j-1)le p(i,j) le p(i+1,j))
实现:
由此,我们可以将(k)的枚举框定在([p(i,r-1),p(l+1,r)])中就可以了,可以证明复杂度为(O(n^2))
[NOI1995]石子合并
[IOI2000]邮局