【算法总结】组合数学相关
【组合数】
〖相关知识〗
通项公式:$C(n,m)=\frac{n!}{m!(n-m)!}$
递推公式:$C(n,0)=1~(n\geq 0)$ ,$C(n,m)=C(n,n-m)=C(n-1,m-1)+C(n-1,m)~~(1\leq m\leq n)$
含义:从 $n$ 个不同的元素中取出 $m$ 个的方案数。
〖模板代码〗
#include<cstdio> #include<algorithm> #include<cstring> #define LL long long using namespace std; const int N=2e5+5; const int mod=1e9+7; int n,m,w,ans,fac ,inv ; int read() { int x=0,f=1;char c=getchar(); while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} return x*f; } int power(int a,int b) { int ans=1; while(b) { if(b&1)ans=1ll*ans*a%mod; a=1ll*a*a%mod;b>>=1; } return ans; } int C(int n,int m){return 1ll*fac *inv[m]%mod*inv[n-m]%mod;} int S(int n,int m) { int ans=0; for(int k=0;k<=m;k++) { if(k&1)w=-1;else w=1; w=(1ll*w*C(m,k)%mod+mod)%mod; w=1ll*w*power(m-k,n)%mod; ans=(ans+w)%mod; } return 1ll*ans*inv[m]%mod; } int main() { n=read();m=read(); for(int i=1;i<=n;i++) w=read(),ans=(ans+w)%mod; fac[0]=1; for(int i=1;i<=m;i++) fac[i]=1ll*fac[i-1]*i%mod; inv[m]=power(fac[m],mod-2); for(int i=m;i>=1;i--) inv[i-1]=1ll*inv[i]*i%mod; printf("%lld",1ll*(S(n,m)+1ll*(n-1)*S(n-1,m)%mod)%mod*ans%mod); return 0; }View Code
【贝尔数】
〖相关知识〗
递推公式:$B(0)=1$ ,$B(n+1)=\sum _{k=0}^{n}\binom{n}{k}B(k)$
含义:基数为 $n$ 的集合划分数。
与第二类斯特林数的关系:$B(n)=\sum _{k=1}^{n}S(n,k)$
【卡特兰数】
〖相关知识〗
递推公式:$H(0)=1$ ,$H(1)=1$ ,$H(n)=H(0)H(n-1)+H(1)H(n-2)+\cdots +H(n-1)H(0)$
$H(n)=\frac{H(n-1)\cdot (4n-2)}{n+1}$
$H(n)=\frac{C(2n,n)}{n+1}=C(2n,n)-C(2n,n-1)$
【错排公式】
〖相关知识〗
通项公式:$f(n)=n!\cdot\sum_{i=2}^{n}\frac{(-1)^i}{i!}$
递推公式:$f(n)=(n-1)\cdot (f(n-1)+f(n-2))$
$f(n)=\sum_{i=0}^{n}(-1)^i\cdot\binom{n}{i}\cdot(n-i)!=\sum_{i=0}^{n}(-1)^i\cdot\frac{n!}{i!}=(-1)^n+\sum_{i=0}^{n-1}(-1)^i\cdot\frac{n!}{i!}=(-1)^n+n\cdot f(n-1)$
【二项式反演】
〖相关知识〗
二项式定理:$(x+y)^n=\sum_{i=0}^{n}\binom{n}{i}x^iy^{n-i}$
二项式反演:$b_n=\sum_{i=0}^{n}\binom{n}{i}a_i\Rightarrow a_n=\sum_{i=0}^{n}(-1)^{n-i}\binom{n}{i}b_i$
$b_k=\sum_{i=k}^{n}\binom{i}{k}a_i\Rightarrow a_k=\sum_{i=k}^{n}(-1)^{i-k}\binom{i}{k}b_i$
- 【数学】素数相关算法、结论总结
- 【2015暑假】鸽巢原理总结 【算法思路+组合数学】
- 【算法总结--数组相关】双指针法的常见应用。
- 组合数学——排列数生成算法详解(zz)
- 机器学习-组合算法总结
- 挑战编程-第六章-组合数学-总结
- JS相关的排序算法总结
- 【算法复习四】计算复杂性与算法分析---组合数学知识汇总
- 组合数学 - 母函数 + 模板总结
- 【算法总结-数组相关】 数组中找特定元素相关~
- 算法--组合数学:杨辉三角数学分析以及Java实现
- 关于数学中排列组合之组合算法实现
- 算法总结--数组相关】双指针法的常见应用
- 二叉树相关算法总结
- 【算法复习四】计算复杂性与算法分析---组合数学知识汇总
- 机器学习-组合算法总结
- 近似最近邻问题相关算法总结
- [总结]其他杂项数学相关(定理&证明&板子)
- COGS NIOP联赛 图论相关算法总结
- 组合数学相关