题目链接

bzoj2830: [Shoi2012]随机树

题解

q1好做

设f[n]为扩展n次后的平均深度

那么\(f[n] = \frac{f[n - 1] * (n - 1) + f[n - 1] + 2}{n}\)

化简之后也就是\(f[n] = f[n - 1] + \frac{2}{n}\)

q2也好做

设f[i][j]表示扩展i次,树高为j的概率,对于左右儿子,子问题显然是一样的

枚举左右子树的i j 转移

\(f[i][std::max(l,k) + 1] += f[j][k] * f[i - j][l] / (i - 1)\)

\(n^4\)可过

代码

#include<cstdio>
#include<algorithm> inline int read() {
int x = 0,f = 1;
char c = getchar();
while(c < '0' || c > '9')c = getchar();
while(c <= '9' && c >= '0') x = x * 10 + c - '0',c = getchar();
return x * f;
} const int maxn = 1007;
int type,n;
double f[maxn];
void solve1() {
f[0] = 0 ;
for(int i = 2;i <= n;++ i)
f[i] = f[i - 1] + 2.0 / i;
printf("%lf\n",f[n]);
}
double F[maxn][maxn];
void solve2() {
F[1][0] = 1.0;
for(int i = 2;i <= n;++ i)
for(int j = 1;j < i;++ j) {
for(int k = 0;k <= j;++ k)
for(int l = 0;l <= (i - j);++ l) {
F[i][std::max(l,k) + 1] += F[j][k] * F[i - j][l] / (i - 1);
}
}
double ans = 0;
for(int i = 1;i <= n;++ i) ans += i * F[n][i];
printf("%lf\n",ans);
}
int main() {
type = read(),n = read();
type == 1 ? solve1() : solve2();
return 0;
}

bzoj2830: [Shoi2012]随机树的更多相关文章

  1. [SHOI2012]随机树

    [SHOI2012]随机树 题目大意( 网址戳我! ) 随机树是一颗完全二叉树,初始状态下只有一个节点. 随机树的生成如下:每次随机选择一个叶子节点,扩展出两个儿子. 现在给定一个正整数\(n\)(\ ...

  2. P3830 [SHOI2012]随机树 题解

    P3830 随机树 坑题,别人的题解我看了一个下午没一个看得懂的,我还是太弱了. 题目链接 P3830 [SHOI2012]随机树 题目描述 输入输出格式 输入格式: 输入仅有一行,包含两个正整数 q ...

  3. P3830 [SHOI2012]随机树

    P3830 [SHOI2012]随机树 链接 分析: 第一问:f[i]表示有i个叶子结点的时候的平均深度,$f[i] = \frac{f[i - 1] + 2 + f[i - 1] * (i - 1) ...

  4. luogu P3830 [SHOI2012]随机树 期望 dp

    LINK:随机树 非常经典的期望dp. 考虑第一问:设f[i]表示前i个叶子节点的期望平均深度. 因为期望具有线性性 所以可以由每个叶子节点的期望平均深度得到总体的. \(f[i]=(f[i-1]\c ...

  5. BZOJ2830 & 洛谷3830:[SHOI2012]随机树——题解

    https://www.luogu.org/problemnew/show/P3830#sub   <-题面看这里~ https://www.lydsy.com/JudgeOnline/prob ...

  6. luogu3830 [SHOI2012]随机树

    传送门:洛谷 题目大意:对于一个只有一个节点的二叉树,一次操作随机将这棵树的叶节点的下方增加两个节点.$n-1$次操作后变为$n$个叶节点的二叉树.求:(1)叶节点平均深度的期望值(2)树深度的数学期 ...

  7. luogu P3830 [SHOI2012]随机树

    输入格式 输入仅有一行,包含两个正整数 q, n,分别表示问题编号以及叶结点的个数. 输出格式 输出仅有一行,包含一个实数 d,四舍五入精确到小数点后 6 位.如果 q = 1,则 d 表示叶结点平均 ...

  8. [SHOI2012]随机树[期望dp]

    题意 初始 \(1\) 个节点,每次选定一个叶子节点并加入两个儿子直到叶子总数为 \(n\),问叶子节点深度和的平均值的期望以及最大叶子深度的期望. \(n\leq 100\) . 分析 对于第一问, ...

  9. 洛谷P3830 [SHOI2012]随机树(期望dp)

    题面 luogu 题解 第一问: 设\(f[i]\)表示\(i\)步操作后,平均深度期望 \(f[i] = \frac {f[i - 1] * (i - 1)+f[i-1]+2}{i}=f[i-1]+ ...

随机推荐

  1. nodejs async series 小白向

    async.series({  flag1:function(done){ //flag1 是一个流程标识,用户自定义      //逻辑处理      done(null,"返回结果&qu ...

  2. kafka系列二、kafka manager的安装和使用

    1. Yahoo kafka manager介绍 项目地址:https://github.com/yahoo/kafka-manager Requirements: Kafka 0.8.1.1 or ...

  3. insmod 时报错“Unknown symbol”问题的解决

    在加载驱动模块时报错: “ Unknown symbol CFG80211_SupBandReInit (err 0)” 查看了内核代码以及加载上的symbol(命令为 cat /proc/kalls ...

  4. windows下设置计划任务自动执行PHP脚本

    背景: 环境部署在linux下或者windows中,可以使用windows的自动任务设置自动执行脚本执行一些日常运维任务 图形界面设置相对比较简单 准备工作: wamp(集成的PHP执行环境) 已经写 ...

  5. 将模型.pb文件在tensorboard中展示结构

    本文介绍将训练好的model.pb文件在tensorboard中展示其网络结构. 1. 从pb文件中恢复计算图 import tensorflow as tf model = 'model.pb' # ...

  6. php实现概率性随机抽奖代码

    1.初始数据: 权重越大,抽取的几率越高 [奖品1, 权重 5], [ 奖品2, 权重6], [ 奖品3, 权重 7], [ 奖品4, 权重2] 2.处理步骤: 1)N = 5 + 6 + 7 + 2 ...

  7. python 全栈开发,Day101(redis操作,购物车,DRF解析器)

    昨日内容回顾 1. django请求生命周期? - 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者po ...

  8. python 全栈开发,Day30(纸牌游戏,异常和错误,异常处理)

    一.纸牌游戏                                                                                              ...

  9. 获取修改CSS

    获取CSS使用方法css("CSS属性名称"), 示例css("color") 设置CSS使用方法css("CSS属性名称","属 ...

  10. HTTP协议特点

    1 HTTP协议特点      1)客户端->服务端(请求request)有三部份         a)请求行--请求行用于描述客户端的请求方式.请求的资源名称,以及使用的HTTP协议版本号 请 ...