1. 程式人生 > 資訊 >2021 年全球高階手機銷售額佔比排名:OPPO 增長 116%,挺進前五

2021 年全球高階手機銷售額佔比排名:OPPO 增長 116%,挺進前五

是個好題啊。。

題意:給定三個數n,d,mod,求有多少種n個點的不同構的樹滿足:除了度數為1的結點外,其餘結點的度數均為d。答案對質數mod取模。
\(n\le1000,d\le10\)
注意到去重,我們直接欽定重心是根。(這個 trick 真的想不到,如果我做過無標號無根樹計數 那個題估計就可以想到了)
但是這樣統計還是會有重複,於是我們可以給樹定一個順序,強制“左偏”(也就是讓樹的子樹按照 siz 大小強制排序)
定義 \(dp_{i,j,k}\) 代表 \(i\) 個點的樹,有 \(j\) 個子節點,每個子節點的 siz 大小最大為 \(k\) 的樹的數量
然後就能轉移了嗎?
首先 \(dp_{i,j,k}\)

可以從 \(dp_{i,j,k-1}\) 轉移過來。這種情況是不包含 siz 為 \(k\) 的子樹的情況。
還有一種是包含 siz 為 \(k\) 的子樹的情況。列舉包含了幾個,轉移方案數就是 \(dp_{i,j,k}\)=\(dp_{i-k*t,j-t,k}*\binom{dp_{k,d-1,k-1}+t-1}{t}\)
然後就做完了。
然而還沒有做完,如果 siz 是偶數的話有可能有雙重心所以要減去 \(\binom{dp_{n/2,d-1.n/2-1}}{2}\) 種方案數。
為什麼是 \(\binom{dp_{n/2,d-1.n/2-1}}{2}\),因為是選兩個不重複的子樹這樣會被算兩次,如果重複了就只會被算一次。(用圖解釋)

然後就做完了。
程式碼