zoukankan      html  css  js  c++  java
  • 卡特兰数

    卡特兰数

    • 通项公式1:(h(n) = frac{1}{n + 1}C_{2n}^n = C_{2n}^n - C_{2n}^{n - 1})
    • 通项公式2:(h(n) = frac{1}{n + 1}sum_{i = 0}^n(C_n^i)^2)
    • 递推公式1:(h(n) = frac{4n - 2}{n + 1}h(n), h(0) = 1)
    • 递推公式2:(h(n + 1) = sum_{i = 0}^nh(i)h(n - i),h(0) = 1)

    问题:从((0,0))((n,n)),每次只能向右或向上走,且不能超过对角线,求走法个数

    img

    进出栈 - 括号匹配

    有n个数字顺序入栈,求有几种进出栈的顺序

    电影购票

    电影票50元,如果有m + n个人排队买票,其中m个人各持有50元面值的钞票1张,而另外n个人各持有100元面值的钞票1张。票房没有预备找零,求有多少种方法可以将这m + n个人排成一列,顺序购票,使得都能买到票

    圆内连弦

    圆周上有2n个点,以这些点为端点连互不相交的n条弦,求不同的连法总数

    图8 圆内连弦不交问题

    凸多边形的剖分

    求凸(n + 2)变形用其(n - 1)条对角线分割为互不重叠的三角形的分法总数

    QQ20151105-11

    模板

    #include <iostream>
    #include <cstdio>
    #define ll long long
    using namespace std;
    const int N = 1e5 + 5;
    const int mod = 998244353;
    ll h[N], inv[N];
    void solve(int N, int p){
        h[0] = 1;
        inv[1] = 1;
        for(int i = 2; i <= N; ++ i)
            inv[i] = (ll)(p - p / i) * inv[p % i] % p;//加上p为了防止变成负数
        
        for(int i = 1; i <= N; i++)
            h[i] = h[i - 1] * (4 * i - 2) % mod * inv[i + 1] % mod;
    }
    int main(){
        int t, n;
        cin >> t;
        solve(N - 1, mod);
        for(int i = 1; i <= t; i++){
            scanf("%d", &n);
            printf("Case #%d: %lld
    ", i, h[n]);
        }
        return 0;
    }
    
    
  • 相关阅读:
    第四周作业
    第三周作业
    2019学期第八周编程总结
    2019学期第七周编程总结
    2019学期第六周编程总结 .
    2019学期第五周编程总结 .
    2019学期第四周编程总结 .
    2019学期第四周编程总结
    2019学期第三周编程总结
    2019年春季学期第二周作业
  • 原文地址:https://www.cnblogs.com/Emcikem/p/11342326.html
Copyright © 2011-2022 走看看