利用数学公式计算组合数
在计算组合数时,可以通过递归算法进行计算。
对递归组合数计算的理解:
从含有a个球的袋子中摸出b个球,可以先取出其中一个带有标记的球。
该问题可分解为:1. 选出所有的球中不包含带标记的球,即为从(a-1)个球中取出b个球;2. 选出的球中包含带有标记的球,即从(a-1)个球中选出(b-1)个球,因为已经首先选了标记过的球。
C
a
b
=
C
a
−
1
b
+
C
a
−
1
b
−
1
C_a^b=C^b_{a-1}+C_{a-1}^{b-1}
Cab=Ca−1b+Ca−1b−1
// 将组合数的结果存入c[n][n]的二维数组中
for (int i = 0; i <= n; i++)
for (int j = 0; j <= i; j++)
if(!j) c[i][j] = 1;
else c[i][j] = c[i-1][j] + c[i-1][j-1]