我的理解 (不一定很對):
大概就是某個東西越多總貢獻越大,要求剛好取n個時的最優解。可以把 dp
狀態裡記的取的個數這一維去掉,而設乙個 co
st,取
k 個物品,總貢獻要多減去cost*k,然後 dp
。cos
t 越大,物品數取越少。 二分 co
st使得 dp
得到的答案剛好取了
n 個物品。 設 g
(x)表示取
x 個時的總貢獻。必須滿足 g(
x)斜率不增才能wqs二分。 f(
x)=g
(x)−
cost
∗x。我們需要找到 co
st使 fm
ax=f
(x0)
,x0=
n 。要能用二分找 co
st,必須 f(
x)是單峰,否則,f′
(x)=
g′(x
)−co
st,cos
t→x0
就不是個正常的遞減函式。若 f(
x)是單峰,則g(
x)斜率必須是遞減的。
注意到 g(
x)斜率可以是有相同的,雖然這樣乙個 co
st可能對應多個 x0
。這其實是沒有問題的: f(
x)有連續一段都是最大值,也就是說二分到最後可能並沒有停在
n , 但答案還是能求的,反正值都一樣,當做停在
n就行了,最後輸出的答案還是補回 n∗
cost
,而不能是最後的 mi
d∗cost。
WQS二分學習筆記
wqs 二分聽起來是個很難的演算法,其實學起來也並不是那麼難。在某些題目中,會對於某個取得越多越優的物品,限定你最多選擇 k 個,問你能得到的最優答案。例如這道題目 cf739e gosha is hunting。這些題目一般都可以通過列舉選擇的物品個數並 o n dp 來做到 o nk 但如果隨著...
總結 wqs二分學習筆記
在某些題目中,強制規定只能選 k 個物品,選多少個和怎麼選都會影響收益,問最優答案。對於上述描述的題目,大部分都可以通過列舉選擇物品的個數做到 o nk 2 或 o nk 的 mathrm 如果沒有選擇個數的限制的話,複雜度大概會降為 o n 級別。先不考慮數量限制。假設要最小化權值。還是拿題說吧 ...
學習筆記 wqs二分 dp凸優化
從乙個經典問題談起 有乙個長度為 n 的序列 a 要求找出恰好 k 個不相交的連續子串行,使得這 k 個序列的和最大 1 leq k leq n leq 10 5,10 9 leq a i leq 10 9 先假裝都會 1 leq k leq n leq 1000 的 dp 做法以及 k 1 的子問...