Address
Solution
好像只有我一人用这种无脑做法,果然蒟蒻
首先,一棵 N N N 个节点的二叉树中有 N N N 个可以插入新叶子节点的位置。
所以一共会生成 N ! N! N! 棵 N N N 个节点的不同的二叉树。
所以,此题从期望题变成了计数题:求生成的所有二叉树的所有无序点对的路径长度之和。
定义状态:
f [ i ] f[i] f[i] 表示 i i i 个节点生成的所有二叉树的所有无序点对的路径长度之和。
g [ i ] g[i] g[i] 表示 i i i 个节点生成的所有二叉树,根到每个点的路径长度之和。
边界:
f [ 0 ] = g [ 0 ] = 0 f[0]=g[0]=0 f[0]=g[0]=0
而一棵二叉树能被生成,当且仅当每个节点的编号都大于其父亲节点编号。
转移先枚举左子树的点数 j j j ,而根必须放最小的编号,所以需要在 i − 1 i-1 i−1 个节点中选出 j j j 个节点放进左子树,其余的放进右子树,即 C i − 1 j C_{i-1}^j Ci−1j 。
先讨论 g g g 。
(1)先考虑根的左子节点到其子树内所有点的距离和加上根的右子节点到其子树内所有点的距离和。当左子树的形态确定时,右子树不管是 ( n − 1 − j ) ! (n-1-j)! (n−1−j)! 种形态中的哪一种,左子节点到其子树内所有点的距离之和都不变,对于右子树的形态确定时也一样。也就是:
g [ j ] × ( i − 1 − j ) ! + g [ i − 1 − j ] × j ! g[j]\times(i-1-j)!+g[i-1-j]\times j! g[j]×(i−1−j)!+g[i−1−j]×j!
(2)对于整棵树的每一种形态,这棵树除了根之外的 i − 1 i-1 i