四邊形優化
凸性優化
凸完全單調性
dpj=max(f(i,j))
對於所有的轉移點 i,j(i<j) 滿足
存在一個 k 使得
∀x<k,f(i,x)≥f(j,x)
∀x≥k,f(i,x)≤f(j,x)
白話的說,就是對於所有轉移點 i,j(i<j)
都存在一個時刻 k
使得在接下來從 j 轉移都會比從 i 轉移好
另外一個角度
在大部分的時候,式子長這樣
dpj=max(dpi+cost(i,j))
也就是說 f(i,j)=dpi+cost(i,j)
通常在題目裡面 cost(i,j) 會有單調性。
有點難解釋是什麼樣的單調性。
先看例題
tioj 1283





P1
P2
Q1
Q2
P2 從 Q2
轉移比從 Q1
多獲得的
P2 從 Q2
轉移比從Q1少拿到的
整理一下
對於兩個點 p1,p2 還有轉移來源 q1,q2
我們定義 cost(a,b):=b從a轉移的額外cost
也就是有 dpj=max(dpi+cost(i,j)) 的時候只考慮 cost
那單看 cost 的時候
p1 從 q2 轉移而不從 q1時,他的損失就是
cost(q2,p1)−cost(q1,p1)
而同理,對 p2 也是
cost(q2,p2)−cost(q1,p2)
整理一下
定義 gainp1,q2=cost(q2,p1)−cost(q1,p1)
gainp2,q2=cost(q2,p2)−cost(q1,p2)
如果 gainp1,q2<gainp2,q2
(p1 從 q2 轉移額外獲得的比 p2 從 q2 額外獲得的還要少)
而且 p1 是從 q2 轉移,那接下來顯然 p2 不可能從 q1 轉移。
所以可以推出有轉移點單調。
同時也有凸完全單調性。
接下來的例題,都可以用這種手法來證明。
符合優超性就會有凸完全單調,但是凸完全單調不保證有優超性。
優化處理方法 1:
維護單調隊列,裡面放轉移來源,同時維護該轉移來源什麼時候會比前一個好
每次有新的來源時 從尾端看
假如 單調隊列 的 back 為 X, 要加進來的是 Y
那就可以二分搜看 Y 什麼時候會開始比 X 還要好。
如果 Y 超過 X 的時刻早於 X 超過 單調隊列 中前一項的時刻,那 X 就永遠都不會被用到。這時候就把 X 給丟掉。
查詢的時候,只要目前用 單調隊列 中第二項轉移比第一項好,就把第一項丟掉,這樣就做完了 !
優化處理方法 2:
分治法
因為我們有轉移點單調,所以可以先給出遞迴式
solve(L,R,FL,FR) 代表要算出 [L,R) 內的答案,
而且轉移來源只會介於 [FL,FR)
那只要每次O(FR−FL) 找出 M=(L+R)/2 的轉移來源
並且遞迴下去,每一層的複雜度都是 O(N) 且 最多logN 層
總複雜度 O(NlogN)
可是如果 dp 為 dpj=dpi+cost(i,j) 的話,就必須套一層 CDQ 。多一個 log ,這題是因為單純轉移點單調,且dp 式沒有用到前一項的 dp 值才可以
例題
TIOJ 1347
給你一個長度 N 的正整數序列 A1∼AN、
一個長度 N−1 的正整數序列L1∼LN−1 和兩個正整數 K,P ,請你將區間分割成若干段,對於每段 [l,r],令總和
M=∑i=lrAi
則 cost=∣M−K∣P
且當你把 i 和 i+1 分在同一塊時,也會獲得 Li
的權重,試問分段後的最小cost 總和。
列出 DP
dpi=min(dpj+cost(j,i))
cost(j,i)=∑k=jk<iLk+A[j,i]P
CF 868F
給你一個長度 N 的整數序列 a1∼aN,請你將區間分割成 K 段,每段的權重是滿足 ai=aj 的無序數對個數,試問最小權重和。
ARC 67 F
給N×M,(N≤5×103,M≤200)二維陣列 Ai,j
求 maxl,r(∑i=1Mmaxl≤k≤r(Ak,i)−(r−l+1))
POI 2014 R3D2 Freight
有個隧道,一次只能容納一台車
隧道的左測入口有 N(N≤106) 台車,第 i 台在
時間 Ti(Ti≤109) 後才出發。
而且在同一個時間點,不能同時有兩台車進隧道。
已知需要 S(S≤109) 單位時間,從隧道頭開到隧道尾。
現在要讓所有車都從隧道左側走到右側,再從右側走到左側。
最後一台車從左邊出來的最早時間為多少?
凹性優化
凹完全單調性
dpj=min(f(i,j))
對於所有的轉移點 i,j(i<j) 滿足
存在一個 k 使得
∀x<k,f(i,x)≥f(j,x)
∀x≥k,f(i,x)≤f(j,x)
白話的說,就是對於所有轉移點 i,j(i<j)
都存在一個時刻 k
使得在接下來從 i 轉移都會比從 j 轉移好
看起來就是和剛剛恰好相反,這種形式就是
當一個新的轉移來源進來的時候,會先成為最佳轉移點。
不過在某個時刻後,他就會變差,再也用不到。
優化處理方法 :
維護單調隊列,裡面放轉移來源,同時維護該轉移來源什麼時候會比前一個差
每次有新的來源時 從尾端看
假如 單調隊列 的 back 為 X, 要加進來的是 Y
那就可以二分搜看 X 什麼時候會開始比 Y 還要好。
如果 X 超過 Y 的時刻早於 deque 中前一項 超過 X 時刻,那 X 就永遠都不會被用到。這時候就把 X 給丟掉。
查詢的時候,只要目前用 deque 中倒數第二項轉移比倒數第一項好,就把倒數第一項丟掉,這樣就做完了 !
例題
USACO 2019 Feb Mowing
給定T,N ,在二維平面上有 N(N≤2×105) 個黑點 Xi,Yi(Xi,Yi≤T,其他點都是白點
現在要從 0,0 走到 T,T 只能往上或往右
一種經過 K 個黑點走法的美度為 K
令 Pi 為路上經過的第 i 個黑點
且 P0=(0,0),PK+1=(T,T)
則這個走法的權重為 ∑i=0Karea(Pi,Pi+1)
求最美的走法中,最小權重是多少
四邊形優化
By Kevin Zhang
四邊形優化
- 1,237