斜率DP复习总结
斜率DP
如bzoj4518征途
f[i]=f[j]+(sum[i]-sum[j])^2;
决策j<k,要求最小值,因此当决策k优于决策j时
f[k]-2*s[i]*s[k]+s[k]^2 < f[j]-2*s[i]*s[j]+s[j]^2
即
(f[k]+s[k]^2)-(f[j]+s[j]^2) < 2*s[i] * (s[k]-s[j]) ①
满足此式表明后面的点优于前面的点
出队:队头后移直到①式不满足,说明这个点是最优点
入队:k越小越优,令x<y<z
如果k(x,y)>k(x,z)那么y出队,(也可表达为k(x,y)>k(y,z))
意思是x与z会比x与y更优,斜率更小,因此y没有必要入队
因为斜率越小越优,所以队列里的斜率是递增的,因此整个图像是开口向上的二次函数。
对于斜率优化dp:
1、当方程涉及求和与平方时考虑可以优化,最后的形式是比较两点的决策优先度可转化为看斜率,比如此题求最小值,所以一斜率小于2*s[i]表明k比j越优
2、做此类题,首先简化题目要求,比如本体答案可以转化;然后列出方程和比较不等式,即令j<k,然后w[k]<w[j](假如求最小值的话),得到斜率的不等式;
3、判断出队情况,比如当队列前后的k都小于2*s[i],表明后面的点始终比前面优
4、判断入队情况,比如k(x,z)<k(x,y)则z点比y点优
此类题的标志:
一般是将长度为n东西分成k段,每段的权值是以乘积或平方的形式出现
如果没要求分段,那么O(n)就可以做
否则O(n*k)