首先可以猜出來每種鈔票的貢獻是獨立的,所以只要對於每種鈔票算出來貢獻最後合併就行了。
直接做複雜度會死掉。
考慮對於每種鈔票,張數隨貢獻的差分陣列顯然是單調的,所以可以用堆動態維護當前的最優解。
發現最多隻會用到$n$種狀態,所以動態的計算這些狀態,而不必全部預處理出來。
我的做法是,求出來至少有k條邊與原來的樹相同的方案數,容斥就可以得到恰好的方案數。
方案數可以通過樹形dp來求,設$f[i][j][k]$表示$i$的子樹中選了$j$條邊,$i$所在的連通塊大小為$k$的方案數。
然後用數樹中的那個式子就可以求出來方案數。
然後這個東西可以繼續優化。考慮那個式子的實際含義,實際上就是在每個聯通塊內選出乙個點的方案數。那麼繼續優化可以將第三維變成$0/1$,表示當前聯通塊是否已經選了。
這樣的複雜度是$o(n^2)$的。
然後題解的做法是個套路,就是變元矩陣樹+高斯消元,代入若干值直接搞即可。之前做過很多遍了。
可以發現對於每個點的限制形如對若干點的同時不選的限制,似乎不可做,然而可以發現,假如在同一方向上同時出現兩種炮台可以經過這個點,那麼這兩個炮台一定撞了。
所以經過乙個點的炮台最多兩個,並且來自不同方向,否則無解,那麼就變成了限制兩個不能同時不選的東西。
於是就是簡單的2-sat模型,直接套就行了。
省選模擬42 題解
容易發現每種假鈔的期望貢獻是獨立的。對於每種假鈔,做乙個 n 2 的 dp 求出來選擇 i 張假鈔的貢獻。然後對這個貢獻做乙個揹包就完事了。考慮乙個東西,就是對於每種假鈔,只能選擇乙個數目加入揹包的貢獻中。所以可以考慮對於每種假鈔一張張加入貢獻。然後發現發現隨著某種假鈔的數量增加,期望增加量是不斷減...
考試 省選42
今天似乎格外的簡單呢。t2可憐的變元矩陣樹定理。暴力插值就行了。值得一提的是臉哥寫的那種 dp 說實話我覺得挺巨的。和數樹那個題一樣。相當於是在找重合的邊集。並且 dp 出答案。然而他的演算法複雜度不夠優秀。所以我們可以用類似的優化方法。利用組合意義從每個連通塊中選出乙個點來作這個 dp dp 的複...
4 2 省選模擬賽 旅行路線 廣義SAM
題目上求出 多少條本質不同的路線。首先定義了 相似的城市為度數相同的城市。還定義了兩條路線相同當且僅當長度相同 且對應位置的城市都是相似的。考慮這張圖的形態 n 1條邊 且每個點都能到1號點。不可能出現環 因為 考慮如果出現環必然 x個點 x條邊 根據鴿巢原理 乙個點被孤立了 所以這是一棵內向樹。暴...