排列组合
  wgnvgb84Na5B 2023年11月02日 108 0
C++

定义

 排列

  排列,一般地,从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列,叫做从n个元素中取出m个元素的一个排列。特别地,当m=n时,这个排列被称作全排列。

  用Αnm表示“从n个元素里取m个元素,排成一排的方案数”,也就是Αnm=n!/(n-m)! ,将它称为排列数

   注:n!即为n的阶乘,记作n!=n×(n-1)×…×2×1。例如3!=6,4!=24,5!=120……

 组合

  组合是一个数学名词。一般地,从n个不同的元素中,任取m(m≤n)个元素为一组,叫作从n个不同元素中取出m个元素的一个组合。我们把有关求组合的个数的问题叫作组合问题。

  用Cnm表示“从n个元素里面选出m个元素”的方案数,也就是Cnm=n!/m!(n-m)! ,特殊的Cn0=1。

  又易由加法原理得Cnm=Cn-1m-1+Cn-1m  ,这就是组合数的递推公式,又叫帕斯卡公式这里本来想加个链接的,但是根本搜不到

用法

  如果想求Cnm那么可以使用以下这段代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll c[25][25];
int n,m;
int main(){
    cin>>n>>m;
    for(int i=0;i<=21;i++)
    {
        c[i][0]=c[i][i]=1;
        for(int j=1;j<i;j++)
            c[i][j]=c[i-1][j]+c[i-1][j-1]; //递推 q(≧▽≦q)
    }       
    cout<<c[n][m]<<endl;     
    return 0;
}

  这样就可以通过O(n2)的算法复杂度得到一个组合数表。之后若想找组合数,直接在表中查询即可。

                                                                        码字不易,点个赞呗§(* ̄▽ ̄*)§

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  8Tw5Riv1mGFK   2024年05月01日   82   0   0 C++
  BYaHC1OPAeY4   2024年05月08日   58   0   0 C++
  yZdUbUDB8h5t   2024年05月05日   44   0   0 C++
  oXKBKZoQY2lx   2024年05月17日   61   0   0 C++
wgnvgb84Na5B