可以發現大概問題是一層一層的。
對於每一層,一定會選完所有長度為 \(2x,2x-1\) 的連續段之後遞迴下一段。
可以考慮將這樣的選擇合併在一起考慮,然後做乙個 \(dp\)。
可以發現概率的大小大概只與剩下的奇數、偶數段的個數有關,所以記錄奇數段的個數就可以轉移了。
然後的問題是怎麼繼續考慮下一層。
比較簡單的是奇數段,只要選中間乙個點就好了。
對於偶數段,選擇兩種可能都是可以的。
但是容易發現這樣的事情:不同的段之間不會相互影響,相同段的左右兩半是對稱的。
所以可以欽定這次的選擇是偶數段的靠左的中點,在遞迴結束之後對所有答案按照對稱軸取個平均數就好了。
首先寫出乙個簡單的 \(dp\),\(f_\) 表示前 \(i\) 個裡選了 \(j\) 個的最大收益。
打表之後可以很容易的發現,這個函式是凸的,並且轉移也是凸的。
所以可以寫個無旋 \(treap\) 合併,然而常數大的飛起。
其實是乙個不難的做法,因為函式是凸的,然後進行的操作是取 \(max\),關注的資訊也不多。
大概可以想到分治之後進行類似閔可夫斯基和的東西,其實就是差分歸併再做一遍字首和。
大概的思想是,首先把染色點轉化為染色與它父親的邊。
然後可以發現,乙個染色操作最多造成聯通塊個數變化 \(1\)。
這也就是說合併的總次數是線性的。
然而顯然直接轉化並不正確,仔細觀察一下。
其實不合法的情況僅當最上面乙個點不聯通。
可以找到最上面的點,之後的情況會形成一段連續的區間。
對於合併操作,其實一定是父親與兒子的合併,其實寫乙個 \(ett\) 就可以支援這樣的交換子樹的操作。
noi前第十七場 題解
考慮這樣乙個做法,對於每個點處理出左側和右側分別的最優決策點,然後比較二者誰更優即可。當然這樣的點可以表示為若干個區間,對於其中每個區間,左右側誰更優是單調的,可以通過二分求解。所以問題就是如何處理出這樣的若干個區間。可以想到這個最優決策點就是上凸包會切到的點。所以寫乙個單調棧維護就好了。學習了一下...
noi前第十場 題解
可以直接寫出乙個簡單的 dp 然後發現這個 dp 的資訊只需要存 a 集合選的個數和末尾選的哪個集合。不妨寫成乙個多項式,那麼我們只關心邊界的情況。所以寫乙個分治 fft 即可。考慮對於每條邊,列舉所有能到達這條邊的角度,計算出合法的面積。所以只需要對角度進行積分即可。為了方便地計算出這個東西,可以...
noi前第九場 題解
可以發現 0 1 這個限制類似於求路徑數,使得路徑經過的邊權恰好合法。顯然可以用容斥來求,這樣可以將問題轉化為欽定其中若干條邊權為 1 其他邊權任意的路徑數。這樣做有乙個好處,原來問題中的 2 的集合可以縮減狀態數。對於欽定之後的若干條 1 邊組成的鏈,可以直接視為無序的。也就是說,可以直接對 n ...