\(wqs\)二分聽起來是個很難的演算法,其實學起來也並不是那麼難。
在某些題目中,會對於某個取得越多越優的物品,限定你最多選擇\(k\)個,問你能得到的最優答案。
例如這道題目:【cf739e】gosha is hunting。
這些題目一般都可以通過列舉選擇的物品個數並\(o(n)dp\)來做到\(o(nk)\)。
但如果隨著選擇物品個數的增加,得到貢獻的斜率是不遞增的,我們就可以用\(wqs\)二分,來將\(o(nk)\)的時間複雜度優化為\(o(nlogn)\)。
\(wqs\)二分的核心思想其實非常簡單。
既然原來選得越多越優,那麼我們可以給選擇乙個物品增加乙個代價\(c\)(\(c\)可以拿來二分),由於總貢獻增長得越來越慢,所以最後肯定會形成乙個單峰函式,然後我們就可以通過\(dp\)等方式來求解出此時的最優答案以及最優答案選擇的物品個數,並根據選擇的物品個數來更新\(c\)的值。
這樣就變成\(o(nlogn)\)了。
最後的答案就是\(f_n+k*c\)(注意,不能寫成\(f_n+g[n]*c\))。
關於例題,文中提到的【cf739e】gosha is hunting一題就是\(wqs\)二分一道比較經典的題目,感興趣的可以自己去看一看、做一做。
【poj1160】post office其實也是一道\(wqs\)二分的入門題,也是值得一做的。
【poj1160】post office 的題解可以參考部落格 【hhhoj】noip模擬賽 捌 解題報告的\(t2\)。
WQS二分 學習筆記
我的理解 不一定很對 大概就是某個東西越多總貢獻越大,要求剛好取n個時的最優解。可以把 dp 狀態裡記的取的個數這一維去掉,而設乙個 co st,取 k 個物品,總貢獻要多減去cost k,然後 dp cos t 越大,物品數取越少。二分 co st使得 dp 得到的答案剛好取了 n 個物品。設 g...
總結 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 的子問...