[SHOI2012]随机树

题目大意( 网址戳我! )

随机树是一颗完全二叉树,初始状态下只有一个节点。
随机树的生成如下:每次随机选择一个叶子节点,扩展出两个儿子。
现在给定一个正整数\(n\)(\(n \le 100\)) , 询问叶子节点个数为\(n\)的随机树:

  • \(q = 1\) :叶子节点的平均深度
  • \(q = 2\) :整棵随机树的平均深度

样例:\(cin\ q\ n\ \ \ \ ;cin\ 1\ 4\ ,\ put\ 2.166667\ \ \ ;\ \ \ cin \ 2 \ 4\ ,\ put\ 2.666667\ \ \ ;\)

解题思路

\(solve_a\): \(q = 1\) (叶子节点平均深度)

设\(f(x)\)表示扩展了\(x\)次后的叶子节点平均深度。
那么求\(f(x)\)时 , 直接把新扩展的节点深度设为 \(f(x-1)\) 不就行了吗?
转移:
\(f(x) = \frac{1}{x} (\ f(x-1)*(x-1) - f(x - 1) + (f(x-1)+1)*2\ )\)
把它展开后:
\(f(x) = f(x - 1) + \frac{2}{x}\) , 初始值:\(f(0) = 0\) ;

\(solve_b\): \(q = 2\) (整棵树的平均深度)

整数概率公式:\(E(x) = \sum_{i=1}^{\infty} P(x \ge i)\)
所以只要求随机树层数大于等于\(i\)层的概率即可。
我们脱离扩展,改为构建一颗有\(n\)个叶子节点,问层数大于等于\(i\)层的概率。
设\(f[x][d]\)表示有\(x\)个叶节点,树深度大于等于\(d\)的概率。
那么每次通过添加根来提升层数 , 枚举左右儿子分配多少个叶子节点即可。
转移:
\[f[x][d] = \frac{1}{x-1}\sum_{i=1}^{x-1} = f[i][d-1] + f[x-i][d-1] - f[i][d-1]*f[x-i][d-1]\]
就是小学容斥原理 , 然后初值为:\(f[x][0] = 1.0\)

实现代码:

#include<bits/stdc++.h>
#define RG register
#define IL inline
#define _ 101
using namespace std;

double f[_][_],res,ans; int q , n ; 

IL void solve1(){
    for(RG int i = 2; i <= n; i ++) res += 2.0 / (double)i ;
    printf("%.6lf" , res) ;  return ;
}
IL void solve2(){
    for(RG int x = 1; x <= n; x ++)f[x][0] = 1.0;
    for(RG int x = 2; x <= n; x ++)
        for(RG int d = 1; d <= x ; d ++){
            for(RG int l = 1; l <= x - 1; l ++)
                f[x][d] += f[l][d-1] + f[x-l][d-1] - f[l][d-1]*f[x-l][d-1] ;
            f[x][d] /= (double)(x - 1) ;
        }
    ans = 0; for(RG int i = 1; i <= n; i ++)ans += f[n][i] ;
    printf("%.6lf" , ans) ;  return ;
}

int main(){
    cin >> q ; cin >> n;
    (q & 1) ? solve1() : solve2() ;
    return 0;
}

[SHOI2012]随机树的更多相关文章

  1. P3830 [SHOI2012]随机树 题解

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

  2. P3830 [SHOI2012]随机树

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

  3. bzoj2830: [Shoi2012]随机树

    题目链接 bzoj2830: [Shoi2012]随机树 题解 q1好做 设f[n]为扩展n次后的平均深度 那么\(f[n] = \frac{f[n - 1] * (n - 1) + f[n - 1] ...

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

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

  5. luogu3830 [SHOI2012]随机树

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

  6. luogu P3830 [SHOI2012]随机树

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

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

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

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

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

  9. 【[SHOI2012]随机树】

    感觉第一问就非常神仙,还有第二问怎么被我当成组合数学题来做了 首先是第一问 期望具有线性性,于是深度平均值的期望等于深度和的期望值的平均 设\(dp_x\)表示具有\(x\)个叶子节点的树的深度和的期 ...

随机推荐

  1. WdatePicker-限制日期选择

    场景: 1. 开始时间,和结束时间最大选择今天. 2. 开始时间和结束时间的最大时间间隔为30天. jsp代码: <!-- 时间段 --> <form> <!-- 开始时 ...

  2. Java经典编程题50道之四十九

    计算某字符串中子串出现的次数. public class Example49 {    public static void main(String[] args) {        String s ...

  3. linux中权限对文件和目录的作用

    chmod 755 a.txt 文件: r:读取文件内容(cat more head tail) w:编辑,新增,修改文件的内容(vi,echo) 不包括删除文件:原因是只能对文件内容进行修改,而在l ...

  4. yii2高级模板使用一个域名管理前后台

    yii2的高级模板分为backend和frontend,最开始用yii的时候并没怎么在意,就使用了两个域名分别解析前后台.今天无意间看见 可以使用一个域名指向前后台. 1.修改 advanced/ba ...

  5. WEB服务器防盗链_HttpAccessKeyModule_Referer(Nginx&&PHP)

    盗链的概念指在自己的页面上展示一些并不在自己服务器上的内容.也就是获得他人服务器上的资源地址,绕过别人的资源展示页面,直接在自己的页面上向最终用户提供此内容.如,小站盗用大站的图片.音乐.视频.软件等 ...

  6. nyoj61 传纸条(一) dp

    思路:两人一个从左上角出发只能向右和向下,另一人从右下角出发只能向左和向上,可以看做两人都是从右下角出发,且只能向左和向上传纸条,并且两条路径不会相交,因为一个人只会传一次,那么随便画一个图就能知道两 ...

  7. Spring Boot 整合 Mybatis Annotation 注解的完整 Web 案例

    摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 公司需要人.产品.业务和方向,方向又要人.产品.业务和方向,方向… 循环』 本文提纲一. ...

  8. a链接在新窗口打开

    平时用的收集了几种方法 1.在head标签里添加,base最大的用处就是可以改变某一个网页默认的属性 <base target="_blank"/> 2.Jquery ...

  9. cips2016+学习笔记︱简述常见的语言表示模型(词嵌入、句表示、篇章表示)

    在cips2016出来之前,笔者也总结过种类繁多,类似词向量的内容,自然语言处理︱简述四大类文本分析中的"词向量"(文本词特征提取)事实证明,笔者当时所写的基本跟CIPS2016一 ...

  10. NLP︱高级词向量表达(一)——GloVe(理论、相关测评结果、R&python实现、相关应用)

    有很多改进版的word2vec,但是目前还是word2vec最流行,但是Glove也有很多在提及,笔者在自己实验的时候,发现Glove也还是有很多优点以及可以深入研究对比的地方的,所以对其进行了一定的 ...