组合数学
数学
组合数学的常见式子
定义式
表示从
一些应用
插板法:
1.有
2.有
3.从
sol: 选择
所以给
递推式
证明(组合意义):
同学和老师出去春游共有
特征:
加号连接,两个组合数的
对称性
对于
证明(组合意义):
从
吸收/相伴等式
最终形式:
证明:
将式子转为阶乘的形式,即可证明等式两边相等。
特征:
除号连接,分号上为
上指标反转
证明:
特征:
有一个(-1)^m。
三项式系数恒等式
证明(组合意义):
特征:
第一个组合数的
平行求和
证明:
不断展开即可。
特征:
上下指标同时加减。
上指标求和
证明(组合意义):
特征:
有
下指标求和(整行)
证明(组合意义):
特征:
有
交错和
证明:
下指标卷积
证明(组合意义):
特征:
有
上指标卷积
证明(组合意义):
特征:
有
范德蒙德卷积
证明(组合意义):
练习题
1.
2.
给
q, n, m ≤ 105,对 1e9 + 7 取模。
1.当已知
以下面的表格为例,第3行等于第2行加第1行.(第一行和第二行的和均为
2.当已知
所以每一步都可以
3.下指标点积
上指标为常数,下指标和为常数(下指标卷积)
4.
求
三项式系数恒等式
二项式定理
当且仅当,
5.有标号连通图计数
设
因为任意两个点有一条边,可选可不选,所以
对于一个点在一个大小为
6.幼儿园篮球题
给定
补充:
Lucas定理
证明:
二项式定理
因为对于任何
所以
考虑
又因为
所以
应用
求
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e5+10;
int t,n,m,p;
ll a[N];
ll ksm(ll x,ll y)
{
x%=p;
ll ans=1;
while(y)
{
if(y&1)ans=ans*x%p;
x=x*x%p;
y>>=1;
}
return ans;
}
ll C(int n,int m)
{
if(m>n)return 0; //防止n-m越界
return a[n]*ksm(a[m],p-2)%p*ksm(a[n-m],p-2)%p;
}
ll lucas(int n,int m)
{
if(m==0)return 1;//边界,m==0时lucas(n/p,m/p)和C(n%p,m%p)都是1。
return (lucas(n/p,m/p)*C(n%p,m%p)+p)%p;
}
int main()
{
scanf("%d",&t);
a[0]=1;
while(t--)
{
scanf("%d%d%d",&n,&m,&p);
for(int i=1;i<=p;i++)a[i]=a[i-1]*i%p;
printf("%lld\n",(lucas(n+m,n)+p)%p);
}
return 0;
}
代码注意事项:
1.要开longlong
2.要判越界。
斯特林数
定义
*轮换:环形排列(首尾相接)
有定义可知
同时我们发现一个
我们知道一个有 n 个元素的排列和一个 n 个元素的置换一一对应,于是对所有置换 中的轮换个数求和,有】
与幂之间的关系
反转公式(没懂)
反演半家桶
二项式反演
斯特林反演
卡特兰数
表达式
对应问题:
-
有一个大小为
的方格图,左下角为 右上角为 ,从左下角开始 每次都只能向右或者向上走一单位,不走到对角线 y = x 上方(但可以触碰) 的情况下到达右上角有多少可能的路径? -
在圆上选择
个点,将这些点成对连接起来使得所得到的 条线段不相交的 方法数? -
一个栈的进栈序列为 1, 2, 3, · · · , n 有多少个不同的出栈序列?
-
个结点可构造多少个不同的二叉树? -
对括号能组成的括号序列数? -
……
通项公式
递推式
容斥
普通
Min-Max 容斥
可以套期望。
通常与FWT/FMT 结合
子集和
点击查看代码
for(int i=0;i<n;i++)//枚举位
for(int j=0;j<(1<<n);j++)//枚举集合
if(j&(1<<i)) f[j]+=f[j^(1<<i)];//这一位为1
ff
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)