基于容斥原理解决的有限制不定方程非负整数解(多重集组合数)计数问题

此类问题通常被表示为:

给出 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_i\leq b_i xibi,其中 m , b i ∈ N m,b_i\in \N m,biN。求该不定方程的非负整数解的个数。

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

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

先考虑如下问题:给出 n n n元一次不定方程 ∑ i = 1 n x i = m \sum_{i=1}^{n}x_i=m i=1nxi=m,其中 m ∈ N m\in\N 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_i\leq b_i xibi的解的集合,此时 ∣ ⋂ i = 1 n S i ∣ |\bigcap_{i=1}^{n}S_i| i=1nSi显然即为同时满足所有约束条件、即合法解的集合的元素个数。根据这个公式,我们只需要考虑不满足 x i ≤ b i x_i\leq 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_i\ge b_i+1(i\in a) xibi+1(ia)(即不满足 x i ≤ b i x_i\le b_i xibi)解的个数,那么,为了保证 x i ≥ b i + 1 ( i ∈ a ) x_i\ge b_i+1(i\in 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)^k\sum_{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

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

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值