简单DP

单调队列&单调栈:

有手就行.jpg

四边形不等式:

\(w(i,j)\)满足\(\forall a\le b<c\le d,w(a,c)+w(b,d)\le w(b,c)+w(a,d)\),那么我们称\(w(i,j)\)满足四边形不等式
\(w(i,j)\)满足\(\forall a\le b<c\le d,w(b,c)\le w(a,d)\),那么我们称\(w(i,j)\)满足区间包含单调性
对于这样一般形式的转移方程:\(f_{l,r}=\min\limits_{l\le 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=\max\limits_{j\in[1,i)}(f_j-a_ia_j+a_i+a_j)\)
我们把后面的式子中只含\(i\)的提出来,只含\(j\)的放在一起,同时含\(i,j\)的放在一起。
\(f_i=a_i+\max\limits_{j\in[1,i)}((f_j+a_j)-a_ia_j)\)
后面的东西我们可以看做是经过\((a_j,a_j+f_j)\)的斜率为\(a_i\)的直线的截距。
那么我们要求截距的最大值,这东西就是一个凸包。
根据斜率与横坐标单调性的有无可以用诸如单调栈、二分栈、set(平衡树)维护凸包。

posted @ 2019-10-23 19:28  Shiina_Mashiro  阅读(140)  评论(0)    收藏  举报