wqs二分


難得更新一次博客...

\(wqs\)二分:

背景(都是意外):

省選前大模擬測去年聯考題,由於\(Day\ 1\)寫掛寫假很自閉,\(Day\ 2\)就直接胡亂莽,\(T1\)讀題嚇着了,\(T3\)看出來大概的思路但是不會降復雜度又懶得寫\(25\)暴力,於是全程莽\(T2\)意外的起源)。

畫了幾個圖之后發現這個題實質是選\(k+1\)條鏈,然后考慮到選中的\(k\)條邊相當於刪去,那么如果這些邊恰好都是負權邊,答案在某種yy出來的意義上會增大,然后如果負權邊數量小於\(k\),就一定會刪掉正權邊,答案在某種意義上就會變小(憑感覺偽證出結論...),於是就想到兩星期前的某道模擬測試題,題目是要求圖上最短路,路徑長度定義為路徑上邊權前\(k\)大的權值和,那個題正解是二分邊權最小值然后所有邊權減去二分值(和\(0\)\(\max\))跑最短路,最后把最短路的\(k\)個二分值長度加上去(其實是我記錯了,那個題枚舉所有出現的長度了,實際上並沒有二分),整個是一個下凸(橫坐標最小邊權,縱坐標最短路長度,排序之后就是求下凸的谷值)。然后就順勢想到二分一下鏈長,和之前的題反過來做,讓損失最小分割。最后因為寫錯變量名,連樣例都沒過,偷稅的爆零。

中午回來之后依舊覺得自己寫的是對的,然后仔細檢查發現變量名和快讀都有點鍋,改完之后抱着試一試的心態重新測了一次,然后,然后,然后......竟然過了(心情復雜)。中午看了一下正解,看起來我好像寫的和正解思路差不多(神情恍惚),不過不是普通意義上簡單的二分,而是\(wqs\)二分,也叫帶權二分、\(DP\)凸優化(論一個想假的人莫名其妙一上午想到了一個神仙東西之后被亂%的心情有多復雜...胡亂莽了一上午然后還一把翻盤了...天知道我一上午干了什么...)。

好了,下面進入正題。

適用范圍:

給出一個選物品的限制,然后要求恰好選\(k\)個,使得權值和最大/小。其中,隨着選擇個數的增加,權值和會呈現出單調性(上凸或下凸)。

原理:

由上凸或下凸的性質,不難發現會有如圖的形狀。
wqs
由這一點,可以發現所求的點應該是橫坐標為\(k\)的點,當然,也只是知道了形狀而已,並不知道上凸的點坐標分別是什么,於是考慮二分切線斜率,讓答案點是切點,有這樣的一個性質:
wqs2
切線斜率單調不升,當切線斜率減小時,切得的點橫坐標增大,反之減小,所以每次二分判斷切點橫坐標即可。另外還有一點:
wqs3
如果斜率一定,那么過切點位置的直線(切線)截距最大,所以我們求得定斜直線在截距最大的情況下與凸包的切點橫坐標就可以進行檢驗了。

不過還有一點需要注意,可能切線上會有多個點,也即在某個斜率的情況下有多個最優決策點,在這種情況下要取橫坐標最小的決策點,最后取\(x_{\max}\)求答案。

例題:

[八省聯考2018]林克卡特樹lct各位都說學過\(wqs\)二分之后就是一眼題,對於這道題就是二分斜率,然后判斷截距最大而且最優決策點橫坐標最小的點的位置,二分的check\(O(n)\)貪心求最大截距以及滿足條件的最小橫坐標即可。找到最小的滿足切點橫坐標為\(k+1\)(鏈數)的斜率,然后截距加橫坐標乘斜率就是縱坐標(答案)的值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM