单调队列优化
通常转移条件满足:
d p [ i ] = m a x ( d p [ j ] + a [ j ] ) ( ∣ j − i ∣ < x ) dp[i]=max(dp[j]+a[j])(|j-i|<x) dp[i]=max(dp[j]+a[j])(∣j−i∣<x)
即转移条件只跟前面的某一项有关,且满足取最值条件。
斜率优化
通常转移条件满足: d p [ i ] = m a x ( d p [ j ] + a [ i ] ∗ a [ j ] ) ( j < i ) dp[i]=max(dp[j]+a[i]*a[j])(j<i) dp[i]=max(dp[j]+a[i]∗a[j])(j<i)
即存在某一项即有 i i i,又有 j j j
入门·模板
斜率优化比较复杂,涉及到了数形结合。
斜率优化的第一步是找出状态转移
这道题的 n 2 n^2 n2暴力解法很简单,有转移如下
d p [ i ] = m i n 0 < = j < i ( d p [ j ] + ( ∑ k = j + 1 i C k + i − j − 1 − L ) 2 ) dp[i]=min_{0<=j<i}(dp[j]+(\sum_{k=j+1}^{i}C_k+i-j-1-L)^2) dp[i]=min0<=j<i(dp[j]+(∑k=j+1iCk+i−j−1−L)2)
记 a i = i + s u m i a_i=i+sum_i ai=i+sumi
a j = j + s u m j + 1 + L a_j=j+sum_j+1+L a