https://ac.nowcoder.com/discuss/187813?type=101&order=0&pos=1&page=0
https://blog.csdn.net/shadandeajian/article/details/82084087
1.简单法---适合n,m很小
#include<bits/stdc++.h> using namespace std; const int MAXN = 1000; int C[MAXN+1][MAXN+1]; //求排列组合数C(m,n) 上面为m,下面为n m<n //C(m,n)=n!/m!/(n-m)!=n*(n-1)*..*(n-m+1)/m!. int baoli_C(int m,int n) //暴力法这里n<=15 { int summ=1,sumn=1; //其实算C(m,n)只要计算min(m,n-m)次就可以了 if(m>n-m) m=n-m; for(int i=1;i<=m;i++){ summ*=i; sumn=sumn*(n-i+1); } return sumn/summ; } void dabiao_C(){ //打表,数据为int,注意溢出数据 n<60 //C(n, m) = C(n -1, m - 1) + C(n - 1, m) for(int i=0;i<MAXN;i++) { // C[i][0]=1; C[0][i]=0;//该写法顺序是错误的,因为这样写C[0][0]=0; C[0][i]=0;C[i][0]=1; } for(int i=1;i<MAXN;i++) for(int j=1;j<MAXN;j++) C[i][j]=C[i-1][j-1]+C[i-1][j]; } int main(){ dabiao_C(); int