简单DP

单调队列&单调栈:

有手就行.jpg

四边形不等式:

(w(i,j))满足(forall ale b<cle d,w(a,c)+w(b,d)le w(b,c)+w(a,d)),那么我们称(w(i,j))满足四边形不等式
(w(i,j))满足(forall ale b<cle d,w(b,c)le w(a,d)),那么我们称(w(i,j))满足区间包含单调性
对于这样一般形式的转移方程:(f_{l,r}=minlimits_{lle k}(f_{l,k}+f_{k+1,r})+w(l,r)),若(w(i,j))既满足区间包含单调性又满足四边形不等式,那么(f)也满足四边形不等式。设(s_{i,j})表示(f_{i,j})取到最优决策的(k),那么(s_{i,j})单调,即(s_{i,j-1}le s_{i,j}le s_{i+1,j})

换根dp:

大概就是先把原本的跑一遍,同时再跑一遍原来的去掉某个子树后的答案。
然后每个点再处理一下。

斜率优化

比如(f_i=maxlimits_{jin[1,i)}(f_j-a_ia_j+a_i+a_j))
我们把后面的式子中只含(i)的提出来,只含(j)的放在一起,同时含(i,j)的放在一起。
(f_i=a_i+maxlimits_{jin[1,i)}((f_j+a_j)-a_ia_j))
后面的东西我们可以看做是经过((a_j,a_j+f_j))的斜率为(a_i)的直线的截距。
那么我们要求截距的最大值,这东西就是一个凸包。
根据斜率与横坐标单调性的有无可以用诸如单调栈、二分栈、set(平衡树)维护凸包。

原文地址:https://www.cnblogs.com/cjoierShiina-Mashiro/p/11728260.html