组合数学相关

组合数:

k * C(n, k) = n * C(n - 1, k - 1);
C(n, 0) + C(n, 2) + … = C(n, 1) + C(n, 3) + …
1 * C(n, 1) + 2 * C(n, 2) + … + n * C(n, n) = n * 2^(n - 1)
C(n,m) = C(n-1,m-1) + C(n-1,m)(杨辉三角递推式) 

Catalan数:

前几项:1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670,129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452
相关:出栈序列!!!
递归公式1
f(n)=n1i=0f(i)f(ni1)
递归公式2
f(n)=f(n1)(4n2)n+1
这个公式不错,O(N)的递推。
组合公式1
f(n)=Cn2nn+1
O(1)的
组合公式2
f(n)=Cn2nCn12n
这四个公式了解即可
最后一个,最重要的公式,必须要掌握的公式!!
递推公式
f[n]=n1i=0f[i]f[ni1]
但是这个递推是N^2的

关于卡特兰数

洛谷P1044 栈

//两种写法,利弊自己试试
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
typedef long long LL;
LL fac[50];
/*int main(int argc,char *argv[]) {
    fac[0] = fac[1] = 1;
    for(int i=2; i<=36; ++i) fac[i] = fac[i - 1] * i;
    int n;
    cin >> n;
    cout << (fac[n * 2] / (fac[n] * fac[n])) / (n + 1);
}*/
int main(int argc,char *argv[]) {
    int n; cin >> n;
    fac[0] = fac[1] = 1;
    for(int i=2; i<=n; ++i)
        for(int j=0; j<i; ++j)
            fac[i] += fac[j] * fac[i - j - 1];
    cout << fac[n];
}


Stirling数 · 1

s(p, k)是将p个物体排成k个非空的循环排列的方法数(或者: 把p个人排成k个非空圆圈的方法数)。
s(p, k) = (p - 1) * s(p - 1, k) + s(p - 1, k - 1);

Stirling数 · 2

S(p, k) = k * S(p - 1, k) + S(p - 1, k - 1).
S(p, 0) = 0, (p >= 1);
S(p, p) = 1, (p >= 0);
且有 S(p, 1) = 1, (p >= 1);
S(p, 2) = 2^(p - 1) - 1, (p >= 2);
S(p, p - 1) = C(p, 2);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七情六欲·

学生党不容易~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值