组合计数

概念

组合计数是指在一个集合中选择一定数量的元素,而不考虑元素的顺序。在C++中,可以使用组合计数来解决各种组合问题,例如从一组元素中选择固定数量的元素。组合计数通常涉及到计算二项式系数(n choose k),其中 n 表示总的元素数量,k 表示要选择的元素数量。

实现

组合计数公式的展开可以通过阶乘的定义来实现。组合数 $C(n,k)$ 可以用以下公式示:
组合计数公式的展开过程:

$C(n, k) = \frac{n!}{k!(n-k)!}$

$= \frac{n \times (n-1) \times \ldots \times (n-k+1) \times (n-k)!}{k! \times (n-k)!}$

$= \frac{n \times (n-1) \times \ldots \times (n-k+1)}{k \times (k-1) \times \ldots \times 2 \times 1}$

用代码表示也很简单:

1
2
3
4
5
6
7
int C(int a,int b)
{
    LL res = 1;
    for(int i=a,j=1;j<=b;i--,j++)
        res = res * i/j;
    return res;
}

组合计数
http://pikachuxpf.github.io/posts/9aab0fcd/
作者
Pikachu_fpx
发布于
2024年1月23日
许可协议