组合数小结

0-问题引入

有一个数组,里面是互不相同的\(n\)个元素,请在其中取出\(m(m\le n)\)个元素(无视顺序),求有几种取法?

I-定义

上题的答案表示为:\(C_n^m\)

\(C_n^m\)是什么意思呢?

我们定义:\[C_n^m=\dfrac{n!}{m!(n-m)!}\]

并统一定义,\(C_n^0=C^n_n=C^0_0=1\)

II-性质

\[C_n^m=C_{(n-m)}^m(\texttt{互补性质})\]

\[C_n^m=C_{(n-1)}^{(m-1)}+C_{(n-1)}^{m}\]

组合数表:

没错就是杨辉三角。

III-应用

III-1 路径计数

在一个\((n\times m)\)的棋盘上\((1\le n,m\le 10^4)\),从左下角走到右上角,每次可以向右或上走一步,求方案总数。

【分析】

针对每种方案,一定有\(n\)次向上的操作,而共需走\(n+m\)次,因此在\(n+m\)中取\(n\)个即可。

【答案】\(C_{(n+m)}^n\)

III-2 方程的解

求方程\(x_1+x_2+...+x_n=k\)的非负整数解总数。

其中\(x_i>=y_i(y_i>=0)\)

【分析】

首先,我们看一个小问题:

求方程\(x_1+x_2+x_3+x_4=10\)的正整数解总数。

其实,我们将\(10\)分解为\(10\)\(1\),那么,我们就可以在这\(10\)\(1\)中插\(3\)个“隔板”隔开这些1。

一组解:[1 1|1|1 1 1 1 1|1 1],此时x1=2,x2=1,x3=5,x4=2。

现在,我们的问题就是插隔板的方案数。

此处共有\(10-1\)处地方可以插隔板,答案显而易见为\(C_9^3\)

推广为\(n\)个未知数,总和为\(k\),那么答案为\(C_{(k-1)}^{(n-1)}\)

但如果是非负整数呢?

很简单,只要在\("1"\)中再插入\(n\)个一即可,即将\(k\)变为\(k+n\),再将其视为正整数解求即可。

原理:设\(a_i=x_i+1,b=k+n\)

那么则有:\(\sum\limits_{i=1}^{n}a_i =b\)

而上面这个方程的正整数解数\(x_1+x_2+...+x_n=k\)非负整数解数是相同的。

所以我们用换元的思想解出了这个问题:\(C_{(n-1)}^{(k+n-1)}\)(隔板一直是\(n-1\)个)。

好了,我们重审本题。

其实就是比上面的问题多了一个限制。

转化方程为:\(x_1+x_2+...+x_n=k+\sum\limits_{i=1}^{n}y_i\)

解法同上,答案:\(C_{(k+\sum_{i=1}^{n}y_i+1)}^{(n-1)}\)

IV-计算Code

template<typename T1,typename T2>inline T1 combination(T1 m,T1 n,T2 mod)
{
    if(m==0||n==m)return 1%mod;
    return (combination(m-1,n-1,mod)%mod+combination(m,n-1,mod)%mod)%mod;
}

\(\texttt{The end.}\)

猜你喜欢

转载自www.cnblogs.com/-Wallace-/p/10848824.html
今日推荐