[國家集訓隊] Tree I

最爱丁珰發表於2024-05-22

藉助這道題目把wqs二分講明白

考慮如下一個問題:

現在一共有若干個物品,物品被分成兩組,現在從中選出若干個物品,但是題目會給出某種限制(也就是在這種限制條件下,物品的選擇不是隨意的,所有選擇集合中,只有一些集合符合題目給出的限制,這樣的集合才可以被選擇),這種限制只跟物品本身有關而跟其權值無關(i.e. 對一個相同的物品選擇集合,其中的物品權值無論如何變化,這個集合的合法性都不改變),而且必須從第一類物品中選出\(p\)個,問如何選擇最優

我們設\(g(x)\)表示從第一類物品選出\(x\)個且滿足題目限制的最優答案,如果說\(g(x)\)是一個凹凸函式,那麼就可以利用wqs二分

比如\(g\)長成下面這個樣子

那麼如果題目給出的\(p=9\),那麼答案就是\(g(9)=5\)

顯然我們是不能求出\(g(x)\)的(否則可以直接輸出了),我們要想辦法把\(g\)搞出來

假設現在有一條直線,斜率為\(k\),令其透過函式上的每一個點(注意函式是離散的),則有

透過\((x_0,g(x_0))\)的直線方程就是\(y-g(x_0)=k(x-x_0)\)

我們給第一類物品的權值都減去\(k\),然後不管\(p\)了,在題目的限制條件下跑出來一個值\(res\),那麼\(res\)是什麼?

\(res\)其實就是上面畫的所有直線的截距的最大值

為什麼?我們將直線寫成\(y-kx=g(x_0)-kx_0\),注意現在\(k\)是已知量。在最初的情況下,假設我們對每個\(x_0\)都跑出來了一個最優解\(g(x_0)\),而在減\(k\)的情況下,每個\(x_0\)的最優解就是\(g(x_0)-kx_0\)(因為權值的變化不會影響限制)。由於現在我們不管\(p\)了,只在題目的限制條件下跑出來了一個最優解,那麼就是我們遍歷了所有\(x_0\)取最優解的最優解,也就是\(max(g(x_0)-kx_0)\)

相關文章