【题解】[SHOI2012] 随机树
概率 / 期望 dp 基础题。
有一个二叉树的背景。
这题有两个值得学习的 trick 。
先看第一问。假设有 i − 1 i-1 i−1 个叶子结点,每个节点的平均深度为 f i − 1 f_{i-1} fi−1 。
然后随机选一个节点复制。这个节点的期望深度为 f i − 1 f_{i-1} fi−1
于是 f i = ( i − 1 ) f i − 1 + f i − 1 + 2 i = f i − 1 + 2 i f_{i}=\frac{(i-1)f_{i-1}+f_{i-1}+2}{i}=f_{i-1}+\frac{2}{i} fi=i(i−1)fi−1+fi−1+2=fi−1+i2
再来看第二问。
设 g [ i ] [ j ] g[i][j] g[i][j] 表示 i i i 次扩展,最终树的深度 ≥ j \geq j ≥j 的 概率 。
那么树的期望深度 ∑ i = 1 n − 1 g [ n − 1 ] [ i ] \sum_{i=1}^{n-1}g[n-1][i] ∑i=1n−1g[n−1][i]
观察到总方案数为 ( i − 1 ) ! (i-1)! (i−1)! ,如果左子树进行 k k k 次 ,右子树进行 i − k − 1 i-k-1 i−k−1 次 ,那么 p = k ! ( i − k − 1 ) ! ( i − 1 k ) i ! = 1 i p=\frac{k!(i-k-1)!\binom{i-1}{k}}{i!}=\frac{1}{i} p=i!k!(i−k−1)!(ki−1)=i1 。
那么根据概率 / 期望公式, g [ i ] [ j ] = ∑ k = 0 i − 1 g [ k ] [ j ] + g [ i − k − 1 ] [ j ] − g [ k ] [ j ] ∗ g [ i − k − 1 ] [ j ] i g[i][j]=\frac{\sum_{k=0}^{i-1}g[k][j]+g[i-k-1][j]-g[k][j]*g[i-k-1][j]}{i} g[i][j]=i∑k=0i−1g[k][j]+g[i−k−1][j]−g[k][j]∗g[i−k−1][j]
时间复杂度 O ( n 3 ) O(n^3) O(n3) 。
__EOF__

本文链接:https://www.cnblogs.com/cqbzly/p/17530165.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」