luogu3830 [SHOI2012]随机树
传送门:洛谷
题目大意:对于一个只有一个节点的二叉树,一次操作随机将这棵树的叶节点的下方增加两个节点。$n-1$次操作后变为$n$个叶节点的二叉树。求:(1)叶节点平均深度的期望值(2)树深度的数学期望值
数据范围:$2\leq n\leq 100$
首先看第(1)问
设$f_i$为$i$个叶节点的二叉树的叶节点平均深度的期望值。
每次选择一个叶节点,扩展出两个新的叶节点,所以总的深度增加$f_{i-1}+2$
则$f_i=\frac{(i-1)*f_{i-1}+f_{i-1}+2}{i}=f_{i-1}+\frac{2}{i}$
所以
$$Ans=\sum_{i=2}^n\frac{2}{i}$$
然后是第(2)问,这个难度要稍微大一点。
我们发现这求的是$n$个数的最大值的期望,而第(1)问的是和的期望,而期望可加,却不能$\max$,就非常不好办了。
这时我们就需要用一个式子
$$E[X]=\sum_{i=1}^{n-1}P(X\geq i)$$
然后就可以转化为其中一个数$\geq i$的概率。
就很容易想到$dp[i][j]$表示$i$个叶节点的二叉树中深度$\geq j$,则左子树深度$\geq j-1$或右子树深度$\geq j-1$
所以
$$dp[i][j]=\frac{\sum_{k=1}^{i-1}(dp[k][j-1]+dp[i-k][j-1]-dp[k][j-1]*dp[i-k][j-1])}{i-1}$$
$$Ans=\sum_{i=1}^{n-1}dp[n][i]$$
然后就做完了。
#include<cstdio>
#define Rint register int
using namespace std;
const int N = ;
int q, n;
double dp[N][N], ans;
int main(){
scanf("%d%d", &q, &n);
if(q == )
for(Rint i = ;i <= n;i ++) ans += 2.0 / i;
else {
for(Rint i = ;i <= n;i ++) dp[i][] = ;
for(Rint i = ;i <= n;i ++){
for(Rint j = ;j < n;j ++){
for(Rint k = ;k < i;k ++)
dp[i][j] += dp[k][j - ] + dp[i - k][j - ] - dp[k][j - ] * dp[i - k][j - ];
dp[i][j] /= i - ;
}
}
for(Rint i = ;i < n;i ++) ans += dp[n][i];
}
printf("%.6f", ans);
}
Luogu3830
luogu3830 [SHOI2012]随机树的更多相关文章
- [SHOI2012]随机树
[SHOI2012]随机树 题目大意( 网址戳我! ) 随机树是一颗完全二叉树,初始状态下只有一个节点. 随机树的生成如下:每次随机选择一个叶子节点,扩展出两个儿子. 现在给定一个正整数\(n\)(\ ...
- P3830 [SHOI2012]随机树 题解
P3830 随机树 坑题,别人的题解我看了一个下午没一个看得懂的,我还是太弱了. 题目链接 P3830 [SHOI2012]随机树 题目描述 输入输出格式 输入格式: 输入仅有一行,包含两个正整数 q ...
- P3830 [SHOI2012]随机树
P3830 [SHOI2012]随机树 链接 分析: 第一问:f[i]表示有i个叶子结点的时候的平均深度,$f[i] = \frac{f[i - 1] + 2 + f[i - 1] * (i - 1) ...
- bzoj2830: [Shoi2012]随机树
题目链接 bzoj2830: [Shoi2012]随机树 题解 q1好做 设f[n]为扩展n次后的平均深度 那么\(f[n] = \frac{f[n - 1] * (n - 1) + f[n - 1] ...
- luogu P3830 [SHOI2012]随机树 期望 dp
LINK:随机树 非常经典的期望dp. 考虑第一问:设f[i]表示前i个叶子节点的期望平均深度. 因为期望具有线性性 所以可以由每个叶子节点的期望平均深度得到总体的. \(f[i]=(f[i-1]\c ...
- luogu P3830 [SHOI2012]随机树
输入格式 输入仅有一行,包含两个正整数 q, n,分别表示问题编号以及叶结点的个数. 输出格式 输出仅有一行,包含一个实数 d,四舍五入精确到小数点后 6 位.如果 q = 1,则 d 表示叶结点平均 ...
- [SHOI2012]随机树[期望dp]
题意 初始 \(1\) 个节点,每次选定一个叶子节点并加入两个儿子直到叶子总数为 \(n\),问叶子节点深度和的平均值的期望以及最大叶子深度的期望. \(n\leq 100\) . 分析 对于第一问, ...
- 洛谷P3830 [SHOI2012]随机树(期望dp)
题面 luogu 题解 第一问: 设\(f[i]\)表示\(i\)步操作后,平均深度期望 \(f[i] = \frac {f[i - 1] * (i - 1)+f[i-1]+2}{i}=f[i-1]+ ...
- 【[SHOI2012]随机树】
感觉第一问就非常神仙,还有第二问怎么被我当成组合数学题来做了 首先是第一问 期望具有线性性,于是深度平均值的期望等于深度和的期望值的平均 设\(dp_x\)表示具有\(x\)个叶子节点的树的深度和的期 ...
随机推荐
- Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小demo mysql循环插入数据、生成随机数及CONCAT函数 .NET记录-获取外网IP以及判断该IP是属于网通还是电信 Guid的生成和数据修整(去除空格和小写字符)
Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer Advanced Installer :Free for 30 da ...
- “2014年CityEngine三维建模与设计精英培训班”——全国巡回举办
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYXJjZ2lzX2FsbA==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
- Unity3D中录制和输出wav文件
近期在做视频录制方面的事情,看了下音频的录制和输出.主要参考官方的FrameCapturer: https://github.com/unity3d-jp/FrameCapturer wav文件结构较 ...
- 怎么让Windows2012和Windows2008多用户同时远程---经过测试有效
链接地址:https://jingyan.baidu.com/article/cd4c2979f19765756e6e60ec.html 怎么让Windows2012和Windows2008多用户同时 ...
- 【iCore4 双核心板_ARM】例程三十二:UART_IAP_ARM实验——更新升级STM32
实验现象及操作说明: 1.本例程共有两个代码包,APP和IAP,IAP程序功能实现将APP程序升级至STM32中. 2.直接上电或烧写程序将执行升级的APP应用程序. BIN升级文件产生方法: 1.编 ...
- Ubuntu下安装open-falcon-v0.2.1
在Ubuntu下安装open-falcon和Centos下安装的方法有点区别,因为Ubuntu使用的包管理器是apt-get,而Centos下使用的是Yum,建议不要再Ubuntu下使用yum 建议自 ...
- jedis中scan的实现
我的版本说明: redis服务端版本:redis_version:2.8.19 jedis: <dependency> <groupId>redis.clients</g ...
- SQUAD的rnet复现踩坑记
在港科大rnet(https://github.com/HKUST-KnowComp/R-Net) 实现的基础上做了复现 采用melt框架训练,原因是港科大实现在工程上不是很完美,包括固定了batch ...
- Python实现代码统计工具——终极加速篇
Python实现代码统计工具--终极加速篇 声明 本文对于先前系列文章中实现的C/Python代码统计工具(CPLineCounter),通过C扩展接口重写核心算法加以优化,并与网上常见的统计工具做对 ...
- 【Zookeeper系列】ZooKeeper伸缩性(转)
原文地址:https://www.cnblogs.com/sunddenly/p/4143306.html 一.ZooKeeper中Observer 1.1 ZooKeeper角色 经过前面的介绍,我 ...