组合数学

排列:

(1)从n个互不相同的元素中选取r个元素进行排列,总的方案数为A_n^r=n!/(n-r)!

(2)从n个互不相同的元素中选取r个元素进行圆排列,总的方案数为A_n^r/n【构成环的排列旋转一周也相等】。

组合:

从n个互不相同的元素里选取r个元素,总的方案数为C_n^r=n!/(n-r)!r!

二项式定理:

〖(a+b)〗^n=∑_(i=0)^n▒〖C_n^i a^i b^(n-i) 〗(a+b)^{n}=\sum_{i=0}^{n}C_{n}^{i} a^{i}b^{n-i}

推论一: \sum_{i=1}^{i-is-add}C_{n}^{i}=2^{n-1}

证明:(1+1)^{n}=......

           (1-1)^{n}=......

二者展开累加结果/2即为所求结果。

推论二:(1+x)^{n}=\sum_{i=0}^{n}C_{i}^{n} x^{n-i}=\sum_{i=0}^{n}C_{i}^{n} x^{i}

对两边求导再同乘x,即可得((1+x)^{n})^{'}x=\sum_{i=0}^{n}C_{i}^{n}ix^{i}

以此类推......

鸽巢(抽屉)原理:

n+1个物品随即放到n个抽屉中,那么肯定会有一个抽屉有至少两个物品。

思考:k个书架,放n本相同的书,有多少种放法?

解法:挡板原理。

我们可以用k-1个书架隔板和n本相同的书合在一起做排列,若两个隔板间没有书则表示这两个隔板表示的书架上不放书。排列的方案数为(n+k-1)!。此时,由于隔板是相同的,所以结果为(n+k-1)!/((n)!(k-1)!)=C_{n+k-1}^{k-1}

多重集:

无限多重集:有n种元素,每种元素无限多。

有限多重集:有n种元素,第i种元素有ki个。

多重集的排列: 

(1)a1,a2......an各不相同,并且均有无穷多个,则选取r个元素形成排列的方案数为n^{r}

(2)a1,a2......an各不相同,并且各有ki个,如果ki>r,则选取r个元素形成排列的方案数为n^{r}

(3)a1,a2......an各不相同,并且各有ki个,则全部元素形成的全排列方案数为(k1+k2+......+kn)!/(k1!k2!......kn!)。

(4)a1,a2......an各不相同,并且各有ki个,现从中选取r个元素,当至少存在一个ki<r时,排列数为:\sum_{k1+k2+k3+......kn=n}r!/(k1!k2!......kn!)

多重集的组合:

(1)a1,a2......an各不相同,并且均有无穷多个,则选取r个元素形成组合的方案数为C_{n+r+-1}^{r}

证明:最终选取的集合一定会呈现出s={x1*a1,x2*a2,......xn*an),x1+x2+......+xn=r,挡板原理,我们要划分出r个部分【为了知道具体xi的值而进行划分】,因此要加入k-1个挡板,总的划分情况为(r+k-1)!,然后由于是组合,所以是无序的,因此还要对结果除去全排列的情况,最终结果为(r+k-1)!/r!=C_{r+k-1}^{r}

(2)a1,a2......an各不相同,并且均各有ki个,如果ki>r,则选取r个元素的方案数为C_{n+r+-1}^{r}

(3)a1,a2......an各不相同,并且各有ki个,现从中选取r个元素,当至少存在一个ki<r时,组合数通过容斥定理或母函数求得。

排列数公式:

(1)A_{n}^{r}=n*A_{n-1}^{r-1}。

证明-球模型按步递推:

要求的是从n个球中取出r个球放到r个不同的盒子里,问方案总数。我们可以按照步骤来递推,第一个位置有n种选择,剩余的部分为A_{n-1}^{r-1},根据乘法法则可证明正确性。

(2)A_{n}^{r}=A_{n-1}^{r}+r*A_{n-1}^{r-1}

证明-球模型按类推导:

要求的是从n个球中取出r个球放到r个不同的盒子里,问方案总数。我们将情况分成两种:

(A)放入的球不包括第一种球的方案数为A_{n-1}^{r}
(B)放入的球必须包括第一种球,则剩下部分的排列方案数为A_{n-1}^{r-1},而参与排列的第一种球有r个位置可选,因此总的方案数为r*A_{n-1}^{r-1}

组合数公式:

(1)C_{n}^{m}=C_{n-1}^{m}+C_{n-1}^{m-1}。从n个物品中选出m个,可以去掉一个在剩下的n-1个种选取m个,也可以选定一个,在剩下的n-1个种选取m-1个。

(2)C_{n}^{m}=C_{n}^{m-n}

(3)C_{n}^{m+1}=(n-m)/(m+1)C_{n}^{m}。

杨辉三角的各种奇怪性质(待更新):

卢卡斯定理:对于非负整数m,n(m>=n)和素数p,同余式C_{m}^{n}=\prod_{i=0}^{k}C_{mi}^{ni}(mod+p),也就是把m和n按照p进制分解。

m=m_{k}p^{k}+m_{k-1}p^{k-1}+......+m_0

n=n_{k}p^{k}+n_{k-1}p^{k-1}+......+n_0

基于卢卡斯定理的推论:C_{m}^{n}为奇数->n&m=n。

简略证明:C_{m}^{n}为奇数->C_{m}^{n}%2==1。由于2是素数,我们可以基于卢卡斯定理进行连乘分解,于是C_{mi}^{ni}仅仅可能为C_{1}^{0}C_{1}^{1}C_{0}^{0},于是连乘分解后所有的小部分都为1。

lucas板子:C_{n}^{m}=n!/(n!(m-n)!)

long long F[100010];//阶乘数组 
long long Mod=1e9+7;
void inif(long long p){//阶乘预处理
    F[0]=1;
    for(int i=1;i<=p;i++){
        F[i]=F[i-1]*i%Mod;
    }

long long inv(long long a,long long m){//求逆元 
    if(a==1)return 1;
    return inv(m%a,m)*(m-m/a)%m;
}

long long Lucas(long long n,long long m,long long p){//卢卡斯定理求组合数 
    long long ans=1;
    while(n&&m){//其中任意一个为0 直接结束   
        long long a=n%p;
        long long b=m%p;
        if(a<b)return 0;
        ans=ans*F[a]%p*inv(F[b]*F[a-b]%p,p)%p;// 
        n/=p;
        m/=p;
    }
    return ans;
}

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值