打表,C(n,m)=C(n-1,m-1)+C(n-1,m) n<=10000
为了方便理解这个递推公式。举个例子...
从5个不同的苹果中取3个苹果,设其中某一个苹果为a;
那么总的组合数方案可以分为两类。
- 取出的这3个苹果中不含苹果a,这种情况相当于从另外4个苹果中取3个苹果,则此时的方案数为C(n-1,m)
- 取出的这3个苹果中含有苹果a,这种情况相当于得从另外4个苹果中再取2个苹果,则此时的方案数为C(n-1,m-1)
/组合数打表模板,适用于N<=3000 //c[i][j]表示从i个中选j个的选法。 long long C[N][N]; void get_C(int maxn) { C[0][0] = 1; for(int i=1;i<=maxn;i++) { C[i][0] = 1; for(int j=1;j<=i;j++) C[i][j] = C[i-1][j]+C[i-1][j-1]; //C[i][j] = (C[i-1][j]+C[i-1][j-1])%MOD; } }