斜率优化dp是用来处理dp方程形如:
f[i]=min{f[j]}+a[i]的问题的算法
将该形式的dp方程等价为形如y=kx+b的方程,然后可以表示出不同j时该方程的斜率,通过比较新加入j所对应的斜率和其他线段的斜率,利用单调队列或二分维护极值,最后dp出答案,该算法可以极大的优化运行时间。
很容易可以得到O(n2)暴力dp:dp[i]=0≤j<imin{dp[j]+(sum[i]−sum[j]+i−j−1−L)2} ==> dp[i]=0≤j<imin{dp[j]+(f[i]−f[j]−1−L)2}(sum为前缀和,f[i]为sum[i]+i)
这时设j1,j2且j2优于j1,于是有:
dp[j1]+(f[i]−f[j11]−1−L)2≥dp[j2]+(f[i]−f[j2]−1−L)2
拆开可得
dp[j1]+f[i]2