我是靠谱客的博主 天真台灯,这篇文章主要介绍基于容斥原理解决的有限制不定方程非负整数解(多重集组合数)计数问题,现在分享给大家,希望可以做个参考。

此类问题通常被表示为:

给出 n n n元一次不定方程 ∑ i = 1 n x i = m sum_{i=1}^{n}x_i=m i=1nxi=m n n n个限制条件 x i ≤ b i x_ileq b_i xibi,其中 m , b i ∈ N m,b_iin N m,biN。求该不定方程的非负整数解的个数。

解决此问题的通常思路是:将有限制的不定方程非负整数解计数转化为无限制的不定方程非负整数解计数。

无限制的不定方程非负整数解计数

先考虑如下问题:给出 n n n元一次不定方程 ∑ i = 1 n x i = m sum_{i=1}^{n}x_i=m i=1nxi=m,其中 m ∈ N minN mN。求方程的非负整数解的个数。

在无限制的情况下,该方程非负整数解的个数为 C m + n − 1 n − 1 C_{m+n-1}^{n-1} Cm+n1n1

证明:隔板法:假设有 n + m − 1 n+m-1 n+m1个位置,选出其中 n − 1 n-1 n1个位置作为隔板,其余 m m m个位置作为数字 1 1 1,这 n − 1 n-1 n1个将 m m m 1 1 1分成了 n n n段,每一段 1 1 1的个数即为两个隔板间代表的数。故 C m + n − 1 n − 1 C_{m+n-1}^{n-1} Cm+n1n1即为答案。

如何转化

有一个关于集合交并补差运算的公式:
∣ ⋂ i = 1 n S i ∣ = ∣ U ∣ − ∣ ⋃ i = 1 n ∁ U S i ∣ |bigcap_{i=1}^{n}S_i|=|U|-|bigcup_{i=1}^{n}complement_US_{i}| i=1nSi=Ui=1nUSi
所以,令 U U U为无限制下满足原方程的全体非负整数解的集合, S i S_i Si为满足约束条件 x i ≤ b i x_ileq b_i xibi的解的集合,此时 ∣ ⋂ i = 1 n S i ∣ |bigcap_{i=1}^{n}S_i| i=1nSi显然即为同时满足所有约束条件、即合法解的集合的元素个数。根据这个公式,我们只需要考虑不满足 x i ≤ b i x_ileq b_i xibi的解的集合(即 ∁ U S i complement_US_{i} USi),此时 ∣ U ∣ = C m + n − 1 n − 1 , ∣ ⋃ i = 1 n ∁ U S i ∣ |U|=C_{m+n-1}^{n-1},|bigcup_{i=1}^{n}complement_US_{i}| U=Cm+n1n1,i=1nUSi显然可以直接运用容斥公式求出来。这样一来,我们就将有限制的不定方程非负整数解计数转化为无限制的不定方程非负整数解计数。

如何计算 ∣ ⋃ i = 1 n ∁ U S i ∣ |bigcup_{i=1}^{n}complement_US_{i}| i=1nUSi

根据容斥公式 ⋃ i = 1 n S i = ∑ k = 1 n ( − 1 ) k − 1 ∑ a i < a i + 1 ∣ a ∣ = k ∣ ⋂ i = 1 k S a i ∣ bigcup_{i=1}^{n}S_i=sum_{k=1}^{n}(-1)^{k-1}sum_{a_i<a_{i+1}}^{|a|=k}|bigcap_{i=1}^{k}S_{a_i}| i=1nSi=k=1n(1)k1ai<ai+1a=ki=1kSai,我们只需要考虑如何计算 ∑ a i < a i + 1 ∣ a ∣ = k ∣ ⋂ i = 1 k ∁ U S a i ∣ sum_{a_i<a_{i+1}}^{|a|=k}|bigcap_{i=1}^{k}complement_US_{a_i}| ai<ai+1a=ki=1kUSai即可。
∣ ⋂ i = 1 k ∁ U S a i ∣ |bigcap_{i=1}^{k}complement_US_{a_i}| i=1kUSai意为满足所有 k k k个限制条件 x i ≥ b i + 1 ( i ∈ a ) x_ige b_i+1(iin a) xibi+1(ia)(即不满足 x i ≤ b i x_ile b_i xibi)解的个数,那么,为了保证 x i ≥ b i + 1 ( i ∈ a ) x_ige b_i+1(iin a) xibi+1(ia) ∀ i forall i i成立,我们将原方程转化为:
∑ i = 1 n x i = m − ∑ i = 1 k ( b a i + 1 ) sum_{i=1}^{n}x_i=m-sum_{i=1}^{k}(b_{a_i}+1) i=1nxi=mi=1k(bai+1)
此时,由于已保证每一个 x i x_i xi恰好不会被满足(取值至少为 b i + 1 b_i+1 bi+1),故此时只需令所有 x x x(包括 x a i x_{a_i} xai任意取非负值累加得到 m − ∑ i = 1 k ( b a i + 1 ) m-sum_{i=1}^{k}(b_{a_i}+1) mi=1k(bai+1),即可得到原方程不满足此 k k k个约束条件的解。而这个问题的解便是无约束不定方程 ∑ i = 1 n x i = m − ∑ i = 1 k ( b a i + 1 ) sum_{i=1}^{n}x_i=m-sum_{i=1}^{k}(b_{a_i}+1) i=1nxi=mi=1k(bai+1)的解的个数,等于 C m + n − 1 n − 1 C_{m+n-1}^{n-1} Cm+n1n1

因此,原有约束的不定方程的解的个数即为:
C m + n − 1 n − 1 + ∑ k = 1 n ( − 1 ) k ∑ a i < a i + 1 ∣ a ∣ = k C m − ∑ i = 1 k ( b a i + 1 ) + n − 1 n − 1 C_{m+n-1}^{n-1}+sum_{k=1}^{n}(-1)^ksum_{a_i<a_{i+1}}^{|a|=k}C_{m-sum_{i=1}^{k}(b_{a_i}+1)+n-1}^{n-1} Cm+n1n1+k=1n(1)kai<ai+1a=kCmi=1k(bai+1)+n1n1

最后注意:在原不定方程被变换形式后此通式可能不适用,但依然可以考虑将有约束问题转化为无约束问题。

最后

以上就是天真台灯最近收集整理的关于基于容斥原理解决的有限制不定方程非负整数解(多重集组合数)计数问题的全部内容,更多相关基于容斥原理解决内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部