zoukankan      html  css  js  c++  java
  • BZOJ4001:[TJOI2015]概率论(卡特兰数,概率期望)

    Description

    Input

    输入一个正整数N,代表有根树的结点数

    Output

     输出这棵树期望的叶子节点数。要求误差小于1e-9

    Sample Input

    1

    Sample Output

    1.000000000

    HINT

     1<=N<=10^9

    Solution

    好神仙一个题啊……
    rqy大爷的证明真的超简单明了QwQ膜拜rqy
    首先设$f_n$表示$n$个点的二叉树个数,$g_n$表示$n$个点所有$f_n$棵二叉树的叶节点总数
    打个表可以发现:
    $f:1 ~2~ 5~ 14 ~42$
    $g:1~ 2 ~6 ~20 ~70$
    可以发现$g_n=n*f_{n-1}$
    怎么证明呢?
    1、对于每颗$n$个点的二叉树,如果里面有$k$个叶节点,我们依次删除$k$个叶子会得到$k$个$n-1$的二叉树
    2、我画了个图才发现对于每颗$n-1$个点的二叉树有$n$个位置可以悬挂一个新的叶子,所以每个$n-1$个点的二叉树被得到了$n$次
    证完了
    $f$的递推式可以通过枚举左子树节点个数得到:
    $f_n=sum_{i=1}^{n-1}f_{i}*f_{n-i-1}$
    (rqy大爷)很容易发现这是个卡特兰数
    答案为$frac{g_n}{f_n} = frac{n*f_{n-1}}{f_n}$
    代入卡特兰数通项公式可以得到答案为$frac{n*(n+1)}{2*(2*n-1)}$

    Code

    1 #include<cstdio>
    2 int main()
    3 {
    4     double n;
    5     scanf("%lf",&n);
    6     printf("%.9lf",n*(n+1)/(2*(2*n-1)));
    7 }
  • 相关阅读:
    一.创建型模式 Factory
    Tcp/Ip I/O函数
    Tcp/Ip协议理解_简单实例
    Tcp/Ip协议理解_3
    Tcp/Ip协议理解_2
    Tcp/Ip协议理解_1
    abp+angular+bootstrap-table的使用
    Abp mvc angular 添加视图
    Abp添加菜单
    JS 获取一串路径中的文件名称
  • 原文地址:https://www.cnblogs.com/refun/p/9312182.html
Copyright © 2011-2022 走看看