数数题(计数类 DP)做题记录
數數題(計數類 DP)做題記錄
CF1657E Star MST
我們稱張無向完全圖是美麗的當且僅當:所有和 \(1\) 相連的邊的邊權之和等于這張完全圖的最小生成樹的邊權之和。
完全圖點數為 \(n\),邊權 \(\in[1,k]\),\(1\le n,k\le 250\)。
發現所有和 \(1\) 相連的邊邊權之和等于 MST 的邊權之和,即限制這張圖的 MST 就是以 \(1\) 為中心的“星星”形狀。
所以任意兩個點之間的邊權一定大于等于他們與 \(1\) 相連的邊的邊權的最大值。
那么設 \(dp(i,j)\) 表示連了 \(\le i\) 的邊權,選擇了除了 \(1\) 之外 \(j\) 個點的方案數。
那么枚舉狀態,將轉移表示把邊權為 \(i\) 邊新加進去,可以得到轉移方程:
\[dp(i,j)=\sum_{x=0}^{j}dp(i-1,x)\times \dbinom{j}{x}\times (k-x+1)^{\binom{j}{2}-\binom{x}{2}} \]總時間復雜度 \(\mathcal{O(n^3)}\)(假設 \(n,k\) 同階)。
P8096 [USACO22JAN] Drought G
Farmer John 的 \(n(n\le 100)\) 頭奶牛站成一排,每一個都有一個饑餓值 \(h_i\),Farmer John 可以每次選擇相鄰的兩頭奶牛使她們的饑餓值同時 \(-1\)。
Farmer John 想讓他的所有奶牛都有相同的饑餓值,盡管他不知道每頭奶牛具體的饑餓值,只知道她們每一頭饑餓值的上限 \(H_i(H_i\le 1000)\),使得 \(h_i\le H_i\)。
請計算出所有滿足 Farmer John 的要求的 \(n\) 元組 \([h_1,h_2,\cdots,h_n]\) 數量對 \(10^9+7\) 取模的結果。
假設最終都到達的饑餓值為 \(k\),設 \(dp_{i,j}\) 表示前 \(i-1\) 頭牛都達到了要求,第 \(i\) 頭牛的饑餓值為 \(j\) 的方案數。
那么因為需要讓 \(i\) 牛也變成 \(k\),可以列出轉移方程:
\[dp_{i,j}\rightarrow\forall j'\in[k,H_{i+1}-j+k]:dp_{i+1,j'} \]上面的方程可以用前綴和優化實現 \(O(1)\) 轉移。
那么最終答案就是 \(dp_{n,k}\)。
由于我們發現如果 \(n\) 是偶數,可以通過 \(\dfrac{n}{2}\) 次操作使所有饑餓值 \(-1\),所以如果 \(n\) 為偶數只用枚舉一個 \(k\) 即可。
[USACO22MAR] Pair Programming G
還是不會
P4778 Counting swaps
總結
以上是生活随笔為你收集整理的数数题(计数类 DP)做题记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Prufer 序列
- 下一篇: 中国移动的宽带怎么连接无线路由器中国移动