容易發現每種假鈔的期望貢獻是獨立的。
對於每種假鈔,做乙個 $n^2$的 dp 求出來選擇 $i$張假鈔的貢獻。
然後對這個貢獻做乙個揹包就完事了。
考慮乙個東西,就是對於每種假鈔,只能選擇乙個數目加入揹包的貢獻中。
所以可以考慮對於每種假鈔一張張加入貢獻。
然後發現發現隨著某種假鈔的數量增加,期望增加量是不斷減少的。
所以不斷取最優策略進行更新就好了。
容易發現問題就是與給定樹重合邊數 $\geq n-1-k$ 的樹的個數。
似乎是顯然的變元矩陣樹定理,然後搞個拉格朗日插值就完事了。
但是蒟蒻太菜了,所以思路比較清奇,發現這個玩意就是個子集反演。
欽定乙個邊集,然後問題就轉化為若干個連通塊的生成樹計數。
設有 $m$個連通塊,然後每個連通塊大小分別為 $size_i$,然後這個生成樹個數有個結論就是 $n^ \prod \limits_^m size_i$。
然後發現這個玩意的瓶頸就是如何欽定 $k$條邊,考慮搞乙個 dp。
顯然對於那個 $n^$ 可以把 $n$ 攤在每個連通塊裡乘上乙個 $n$。
然後可以寫乙個簡單的子樹歸併,$dp_$ 表示 $i$ 子樹中,欽定了 $j$ 條邊,最後乙個連通塊有 $k$ 個點的總貢獻。
轉移的時候分欽定連在一起,不欽定那麼給權值乘上乙個 $n*k$ 就完事了。
分析一下複雜度,是 $o(n^4)$ 的。
然後考慮一下實際含義,這個乘 $size_i$ 其實就是對於每個連通塊選擇其中乙個定為特殊點。
然後可以改一下 dp定義,$dp_$ 表示 $i$ 子樹中,欽定了 $j$ 條邊,最後乙個連通塊是否選擇了特殊點。
直接子樹歸併,複雜度就是 $o(n^2)$ 的了。
考慮如果乙個炮台能打到別的炮台,那麼這個方向就結束了。
然後每個炮台有兩個方向,要求就是 $a\ xor\ b=1$。
如果有 $k$ 個炮台欽定方向之後就能打到乙個空地,那麼要求就是 $x_1\ or x_2 \or x_3 \or x_=1$。
然後發現這個玩意就不會做了。
然而實際上並不存在 $k>2$ 個炮台都能打到乙個空地的情況。
因為炮台不能相互打到的限制,每個空地的橫向和縱向顯然只能有一道射線能射過來。
然後問題就轉化為了簡單的 2-sat 問題,寫個 tarjan 就完事了。
省選模擬42
首先可以猜出來每種鈔票的貢獻是獨立的,所以只要對於每種鈔票算出來貢獻最後合併就行了。直接做複雜度會死掉。考慮對於每種鈔票,張數隨貢獻的差分陣列顯然是單調的,所以可以用堆動態維護當前的最優解。發現最多隻會用到 n 種狀態,所以動態的計算這些狀態,而不必全部預處理出來。我的做法是,求出來至少有k條邊與原...
省選模擬104 題解
a.簽到題 把每個點向它右側比他大的第乙個點之間連邊,如果沒有那麼向 root 連邊。那麼可以構成一棵樹。特判一些情況之後,可以認為問題就是 1.給某節點和它的所有兒子節點權值加上乙個值。2.詢問一條路徑的權值和。首先考慮如果只詢問單點的維護方法,其實就是打乙個標記表示給整個兒子集合都加上了若干權值...
省選模擬102 題解
a.island 對於正負不同的情況,o n 列舉左側的位置然後計算。對於正負性相同的情況,把笛卡爾樹建出來,然後每次考慮跨過最小值的貢獻。分幾種情況 左右均不超過最小值,左右僅有乙個超過最小值,左右都超過最小值。然後順便統計上其中乙個端點為劃分點的貢獻。然後瘋狂的寫式子拆式子就沒了。做法挺簡單的,...