隔板法
计算不定方程的等式方程非负整数解的组数
问题描述
对于不定方程\(a_1 + a_2 + a_3 + \ ... \ + a_k = g\),求解该不定方程正整数解的组数
eg: \(k = 3, g = 4\)时,\(①1 + 1 + 2 = 4 \ ②1 + 2 + 1 = 4 \ ③2 + 1 + 1 = 4\),所以此时是三组解
问题分析
问题可等效为求解将\(g\)个小球分成\(k\)组的方案数
解决方法为隔板法。\(g\)个小球共\(g-1\)个间隔,\(k-1\)个隔板可以分为\(k\)个部分,在\(g-1\)个间隔中放置\(k-1\)个隔板的方案数即为答案
隔板法能够运用的前提条件为保证\(a_i\)为非负整数,这样使用隔板划分出的数据才是合法的。假设\(a_i\)可能为负数或0,使用隔板是无法得到对应数据的
代码实现
仅需要实现组合数的计算,具体内容见组合数的代码实现
例题
计算不定方程的不等式方程非负整数解的组数
问题描述
\(y_1 + y_2 + y_3 + \ ... \ + y_k \leq g\)
\(y_i \geq 1\)
求符合条件的\(y_i\)的解的组数
问题分析
对于等式\(y_1 + y_2 + y_3 + \ ... \ + y_k = g\),求解方法可以采用隔板法,这是在上面讨论过的
假设我们目前仅考虑\(=\)的情况,只需在\(g-1\)个间隔中放置\(k-1\)个隔板,从而构成k个数
接着考虑\(<\)的情况,此时形成的k个数需要小于g,即g个球中有未进入分组的,在\(g-1\)个间隔中放置\(k\)个隔板,这样构成的\(k+1\)个分组中最后一组就相当于未进入分组的,前k个数的和就\(<g\)了
综合考虑以上两种情况,最终策略为在\(g-1\)个间隔加上最后的位置中放置\(k\)个隔板。当隔板全部处于中间\(g-1\)个位置时,对应的是\(<\)的情况;当最后一个隔板处于最后的位置时,中间\(g-1\)个间隔中还是\(k-1\)个隔板,对应的是\(=\)的情况。
代码实现
同样仅需要实现组合数的计算,,具体内容见组合数的代码实现