1.斜率优化dp
以例题P3628 [APIO2010] 特别行动队
设\(f[i]\)为以\(i\)结尾最大的修正战斗力
易得状态转移方程\(f[i]=max(f[j]+a*(s[i]-s[j])^2+b*(s[i]-s[j])+c)\)
其中\(1 \le j \le i-1\)
把方程化简得:\(f[i]=f[j]+a*s[i]^2-2*a*s[i]*s[j]+a*s[j]^2+b*s[i]-b*s[j]+c\)
将含有\(i\)的项放在一起,含\(j\)的项放在一起
\(f[i]-a*s[i]^2-b*s[i]=-2*a*s[i]*s[j]+a*s[j]^2-b*s[j]+c\)
含\(i\)的项作为一次函数\(y=kx+b\)即\(b=y-kx\)的\(b\)
既含\(i\)又含\(j\)的项作为k,\(k=-2*a*s[i],x=s[j]\)只含\(j\)的项作为\(y=a*s[j]^2-b*s[j]+c\)
那么我们要求\(f[i]\)的最大值,所以要让\(b\)这个整体最大,既需要维护的是上凸包,原因如下:
如图显然上凸包上的点的\(b\)值要大于下凸包上的\(b\)值
代码
2.单调队列优化dp
呵呵,以后再补,某人都是用的线段树维护的。。