zoukankan      html  css  js  c++  java
  • BZOJ4001[TJOI2015]概率论(数学、期望、生成函数、卡特兰数)

    题目传送:https://www.lydsy.com/JudgeOnline/problem.php?id=4001

    Description

    111(3)

    Input

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

    Output

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

    Sample Input

    1

    Sample Output

    1.000000000

    HINT

    1<=N<=10^9


    既然每种形态出现的概率相同,如果g(i)表示有i个节点的二叉树形态数,f(i)表示有i个节点的二叉树所有形态的叶子节点个数之和,那么答案显然是f(n)/g(n)。考虑计算g(i),除去一个节点作为根,其余的节点分到左右子树,不难得出递推式:

    image

    计算f(i),枚举左子树,累加左子树的贡献,右子树等价,不难得出递推式:

    image

    观察这两个式子,都是卷积的形式,卷积对应着生成函数相乘,那么构造f(x)的生成函数F(x),g(x)的生成函数G(x),根据递推式可得:

    image

    解得:

    image

    G(x)不取另一根是为了让函数收敛。

    利用广义二项式定理展开,一波推导可得:image

    那么:image

    我只想说:打表找规律多好啊!!!

    代码:

      1 #include <cstdio>
      2 #include <cstring>
      3 #include <iostream>
      4 using namespace std;
      5 
      6 int main()
      7 {
      8 	double n;
      9 	scanf("%lf" , &n);
     10 	printf("%.9lf
    " , n * (n + 1) / (2 * n - 1) / 2);
     11 	return 0;
     12 }//Rhein_E
    View Code
  • 相关阅读:
    数组的排序
    2017-2018学年实习心得
    2017-2018学年实习总结
    古人警句
    课程意见
    第二次冲刺第十天
    第二次冲刺第九天
    第二次冲刺第八天
    第二天冲刺第七天
    第二次冲刺第六天
  • 原文地址:https://www.cnblogs.com/Rhein-E/p/9392209.html
Copyright © 2011-2022 走看看