简单排列组合
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; } } }