组合数

组合数

定义

  • \(n\) 个物品中选 \(m\) 个物品的方案数。
  • 记作 \(C^m_n\)\(C(n,m)\)\(\binom{n}{m}\)
  • \(C_n^m=\dfrac{n!}{m!(n-m)!}\)
  • \(C_n^m=C_{n-1}{m-1}+C_{n-1}^{m}\)

性质

  1. \(C^m_n=C^{n-m}_n\)
  2. \(C_n^m=\textstyle\sum^{n-1}_{i=0}C^{m-1}_i\)
  3. \(m\times C_n^m=n\times C^{m-1}_{n-1}\)
  4. \(\textstyle\sum_{i=0}^nC_n^i=2^n\)

代码

莫名其妙拿了个次优解(?

利用乘法逆元快速求解 查询复杂度 \(O(\log M)\)\(M\) 为模数。

仅适用于模数为质数的情况。

ll QuickPow(ll a,ll b){
	ll res = 1;
	while(b){
		if(b&1) res = res * a % MOD;
		a = a * a % MOD;
		b >>= 1;
	}
	return res % MOD;
}

ll fro[maxN];

inline void pre(ll n){
	fro[0] = 1;
	for(ll i = 1;i<=n;i++) fro[i] = fro[i-1] * i % MOD;
}

inline ll inv(ll n){
	return QuickPow(n,MOD-2) % MOD;
}

inline ll C(ll n,ll m){
	if(n < m) return 0;
	return fro[n] * inv(fro[m])% MOD * inv(fro[n-m]) % MOD;
}

卡特兰数

  • 简单来说,卡特兰数就是一个有规律的数列,在坐标图中可以表示为:从原点 \((0,0)\) 出发,每次向 \(x\) 轴或者 \(y\) 轴正方向移动 \(1\) 个单位,直到到达\((n,n)\)点,且在移动过程中不越过第一象限平分线的移动方案总数。

  • \(Catalan_n=\dfrac{1}{n+1}C^n_{2n}\)

posted @ 2022-07-26 18:13  Burnling  阅读(263)  评论(0编辑  收藏  举报