四邊形不等式
設 w(x,y) 是定義在整數集合上的二元函數
若對於定義域上的任意整數 a,b,c,d,其中 a≤b≤c≤d
都有 w(a,c)+w(b,d)≤w(a,d)+w(b,c) 成立
則稱函數 w 滿足四邊形不等式
簡單的說就是 相交小於包含
定理
若對於定義域上的任意整數 a,b,其中 a<b,都有
w(a,b+1)+w(a+1,b)≥w(a,b)+w(a+1,b+1)
則函數 w 滿足四邊形不等式
決策單調性
dp[i]=min(dp[j]+w(j,i)),j∈[0,i)
若函數 w 滿足四邊形不等式,則 dp 具有決策單調性
注意:若 dp[i]=max(dp[j]+w(j,i)),j∈[0,i)
則需滿足定理 w(a,b+1)+w(a+1,b)≤w(a,b)+w(a+1,b+1)
也就滿足四邊形不等式 w(a,c)+w(b,d)≥w(a,d)+w(b,c)
規律
如果 dp 函數沒有 dp[j] 這一項,直接分治 Yet Another Minimization Problem
w 的導函數是常數,也就是原函數爲直線,直接斜率優化
導函數遞增、求最大值(檸檬),或者導函數遞減、求最小值,要用單調棧
導函數遞增、求最小值(詩人小G),或者導函數遞減、求最大值(Lightning Conductor),要用單調隊列
做法
若用單調隊列,設 k[tail] 表示 tail 與 tail+1 兩點,在 k[tail] 處開始,tail+1 更優
則需要二分 cal 計算 k[tail],注意二分的判斷
入隊時若滿足 k[tail-1]>=cal(q[tail], i)
,則 q[tail] 直接出隊
取最優值時若滿足 k[head]<=i
,則 q[head] 直接出隊
根本不需要弄什麼三元組