题意:询问n个点的每个非叶子点度数恰好等于d的不同构的无根树的数目。
n≤1000,d≤10n≤1000,d≤10。
题解:
这题真的是一道非常好的题
首先考虑有根树
定义f[i][j][k]表示i个点,根节点度数为j,最大子树大小为k
转移的时候枚举最大子树以及个数,这样保证了不重构
通过记录了根节点的度数我们就能很好的转移了
DP(n−ik,m−i,k−1)×C(DP(k,d−1,k−1)+i−1,i)
f[i+1][I][1]=1
f[1][0][0]=1
初值怎么赋呢
考虑无根的时候
由于一棵树重心只有1个或2个
且只有重心满足max子树<=n/2
所以利用这个性质我们可以让重心做根
另外一个性质是重心如果为2,那么他们就是相连的
所以我们可以计算(n/2,m-1,无限制)
然后k*(k-1)/2+k就是所求答案了