zoukankan      html  css  js  c++  java
  • luoguP3978 [TJOI2015]概率论 卡特兰数

    考虑分别求出$f_n, g_n$表示$n$个点的有根二叉树的数量和$n$个点的所有情况下有根二叉树的叶子结点的总数

    有$f_n = sum_{k} f_k * f_{n - 1 - k}$,因此有$f_n = C_n$,其中$C_n$为卡特兰数

    有$g_n = sum_{k} g_k * f_{n - 1 - k} + g_{n - 1 - k} * f_k$

    通过打表,可以发现$g_n = n * C_{n - 1}$,可以用归纳法证明

    因此答案为$frac{g_n}{f_n} = frac{n * C_{n - 1}}{C_n} = frac{n * (n + 1)}{4 * n - 2}$

    复杂度$O(1)$

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    using namespace std;
    
    #define de long double
    
    de n;
    
    int main() {
        cin >> n;
        de p = (de)n * (de)(n + 1) / (de)(4 * n - 2.0);
        printf("%.13Lf", p);
        return 0;
    }
  • 相关阅读:
    java分解质因数
    GUID全局唯一标识符
    Oracle-教师信息表(Teacher)
    Oracle-成绩表(Score)
    Oracle-建表course
    Oracle-建表student
    输入输出-复制
    Map
    哈希
    链表
  • 原文地址:https://www.cnblogs.com/reverymoon/p/9678432.html
Copyright © 2011-2022 走看看