简单排列组合


1.排列公式:在m个数找出n个不同的数就是一个排列,取出所有排列就是排列数。

                 A(m,n)=m*(m-1)...(m-n+1) //第一个可以取m种,第二次m-1种,.....最后m-n+1种

                            =m!/(m-n)!

                 A(m,n)=n*A(m-1,n-1)//可用于打表,0!=1;

2.组合公式:在m个数中找出n个不同的数为一组,总的组数

                C(m,n)=A(m,n)/n! //选取n个数组成排列,由于一个组合必定有n!种排列,所以排列数需要除以n!去掉重复计算的

                           =m!/((m-n)!*n!)

                           =(m-n+1)*...m/n!  //一个变形,编程可用

3.组合数打表:C(m,n)=C(m-1,n)+C(m-1,n-1);

#define rep(i,a,b) for(int i=a;i<=b;i++)//宏定义,方便打字
void getc(){ //3000左右比较适合 c[0][0]=1; rep(i,1,3000){ c[i][0]=1; rep(j,1,i){ c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod; } } }