不定方程的解的个数

Lv0

  首先我们看这样一个问题,求 ∑ i = 1 n x i = b \sum\limits_{i = 1}^n x_i = b i=1∑n​xi​=b 的非负整数解的个数。

  这个问题就非常简单啊,我们稍微把他转化一下,这个问题就等价于有 n n n 个小朋友分 b b b 个糖果,每个小朋友至少分到 0 0 0 个糖果(好惨啊),求分完糖果的方案数。

  然后我们再转化一下问题,现在有 b b b 个糖果排成一排,在其中放 n − 1 n - 1 n−1 个木板(可以有多个木板在同一个格子里),这样就能把这些糖果分成 n n n 部分,求方木板的方案数。

  这样就很显然了嘛,答案就是总共有 n + b − 1 n + b - 1 n+b−1 个格子可选,在其中选出 n − 1 n - 1 n−1 个格子的方案数,也就是 C n + b − 1 n − 1 C_{n + b - 1}^{n - 1} Cn+b−1n−1​。

Lv1

  还有这样一个问题,求 ∑ i = 1 n x i = b \sum\limits_{i = 1}^nx_i = b i=1∑n​xi​=b 且 x i ≥ l i x_i \geq l_i xi​≥li​ 的非负整数解数。显然我们非常不希望出现后面的约束条件,于是我们考虑这样:

∑ i = 1 n x i = b − ∑ i = 1 n l i \sum_{i = 1}^nx_i = b - \sum_{i = 1}^nl_i i=1∑n​xi​=b−i=1∑n​li​

  这样一来我们就把问题转化成了第一个问题一样的形式了(就相当于我们减掉了 x i < l i x_i < l_i xi​<li​ 的贡献),答案就是:

a n s = ( n + b − ∑ i = 1 n l i − 1 n − 1 ) ans = \begin{pmatrix} n + b - \sum\limits_{i = 1}^n l_i - 1 \\ n - 1 \end{pmatrix} ans=⎝ ⎛​n+b−i=1∑n​li​−1n−1​⎠ ⎞​

Lv2

  最后一个问题,求 ∑ i = 1 n x i = b \sum\limits_{i = 1}^nx_i = b i=1∑n​xi​=b 且 x i ≤ r i x_i \leq r_i xi​≤ri​ 的非负整数解的个数。这个问题就不像上一个那么好转换了。所以我么考虑容斥掉 x i ≥ r i + 1 x_i \geq r_i + 1 xi​≥ri​+1 的贡献。

  我们令集合 S S S 表示 ∑ i = 1 n ( x i ≥ r i + 1 ) \sum\limits_{i = 1}^n(x_i \geq r_i + 1) i=1∑n​(xi​≥ri​+1) 的二进制集合。这样就相当于求 S = { 0 , 0 , ⋯ , 0 } S = \{ 0, 0, \cdots, 0 \} S={0,0,⋯,0} 的时候的答案。我们令 f ( S ) f(S) f(S) 表示该二进制集合为 S S S 时的答案。则有:

f ( S = { 0 , 0 , ⋯ , 0 } ) = t o t − ∑ S ⊂ U ( − 1 ) ∣ S ∣ + 1 f ( S ) f(S = \{0, 0, \cdots, 0\}) = tot - \sum_{S \subset U}(-1)^{|S| + 1}f(S) f(S={0,0,⋯,0})=tot−S⊂U∑​(−1)∣S∣+1f(S)

  其中 t o t tot tot 表示总数,也就是第一个问题的答案。 U = { 0 , 0 , ⋯ , 0 } U = \{ 0, 0, \cdots, 0 \} U={0,0,⋯,0} ( n n n 个 0 0 0)。上面这个式子就是容斥原理嘛。

  然后其中(等价于第二个问题):

f ( S ) = ( n + b − 1 − ∑ i ∈ S ( r i + 1 ) n − 1 ) f(S) = \begin{pmatrix} n + b - 1 - \sum\limits_{i \in S} (r_i + 1) \\ n - 1 \end{pmatrix} f(S)=(n+b−1−i∈S∑​(ri​+1)n−1​)

  于是:

a n s = ( n + b − 1 n − 1 ) − ∑ S ⊂ U ( − 1 ) ∣ S ∣ + 1 f ( S ) = ( n + b − 1 n − 1 ) + ∑ S ⊂ U ( − 1 ) ∣ S ∣ ( n + b − 1 − ∑ i ∈ S ( r i + 1 ) n − 1 ) = ∑ S ⊆ U ( − 1 ) ∣ S ∣ f ( S ) \begin{aligned} ans & = \begin{pmatrix} n + b - 1 \\ n - 1 \end{pmatrix} - \sum_{S \subset U}(-1)^{|S| + 1} f(S) \\ & = \begin{pmatrix} n + b - 1 \\ n - 1 \end{pmatrix} + \sum_{S \subset U} (-1)^{|S|} \begin{pmatrix} n + b - 1 - \sum\limits_{i \in S}(r_i + 1) \\ n - 1 \end{pmatrix} \\ & = \sum_{S \subseteq U} (-1)^{|S|}f(S) \end{aligned} ans​=(n+b−1n−1​)−S⊂U∑​(−1)∣S∣+1f(S)=(n+b−1n−1​)+S⊂U∑​(−1)∣S∣(n+b−1−i∈S∑​(ri​+1)n−1​)=S⊆U∑​(−1)∣S∣f(S)​

关于不定方程解的个数的问题相关推荐

  1. 计算不定方程解的个数的方法汇总

    写在前面 最近做了一些题目, 才发现当初学习组合数学时候还是做的题太少, 很多东西只是知道其概念如何, 真正上手题目还是get不到精髓. 这次来总结一下计算不定方程解的个数的一些方法, 加深一下对这块 ...

  2. python解多元多次方程组_多元一次不定方程解的个数

    #!/usr/bin/python3.6 # -*- coding: utf-8 -*- """ 多元一次不定方程解的个数 problem1: 将30条鱼放入10个桶中, ...

  3. HDU 5201 The Monkey King 组合数+不定方程解的个数

    题意:链接 方法:组合数+不定方程解的个数 解析: 毒瘤题,好难啊,刷一个我就不想再刷另外两个了 这玩意的话,后俩先不看. 先看前两个. 前两个是啥意思呢. 不妨考虑一下挡板法. 这里我举一个某篇我想 ...

  4. 多元一次不定方程解的个数

    链接:https://ac.nowcoder.com/acm/contest/553/D 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  5. 【组合数学】生成函数 ( 使用生成函数求解不定方程解个数 )

    文章目录 一.使用生成函数求解不定方程解个数 1.带限制条件 2.带系数 参考博客 : [组合数学]生成函数 简要介绍 ( 生成函数定义 | 牛顿二项式系数 | 常用的生成函数 | 与常数相关 | 与 ...

  6. 求解多元一次方程解的个数(参考内容)

    1.整数多元一次不定方程的矩阵解法与程序设计 2.欧几里得算法(含严谨证明) 3.扩展欧几里得算法(含严谨证明) 4.多元一次不定方程解的个数 但只有系数是1的时候才可以排列组合..我们要解决的是系数 ...

  7. 【组合数学】生成函数 ( 使用生成函数求解不定方程解个数示例 2 | 扩展到整数解 )

    文章目录 一.使用生成函数求解不定方程解个数示例 参考博客 : [组合数学]生成函数 简要介绍 ( 生成函数定义 | 牛顿二项式系数 | 常用的生成函数 | 与常数相关 | 与二项式系数相关 | 与多 ...

  8. 【组合数学】生成函数 ( 使用生成函数求解不定方程解个数示例 )

    文章目录 一.使用生成函数求解不定方程解个数示例 参考博客 : [组合数学]生成函数 简要介绍 ( 生成函数定义 | 牛顿二项式系数 | 常用的生成函数 | 与常数相关 | 与二项式系数相关 | 与多 ...

  9. 隔板法求解不定方程x1+x2+x3=5解的个数

    隔板法求解不定方程的解的个数 文章目录 隔板法求解不定方程的解的个数 1.求正整数解的个数--普通隔板法 2.求非负整数解的个数--添加元素隔板法 1.求正整数解的个数--普通隔板法 将不定方程想象成 ...

最新文章

  1. 代替Mask R-CNN,BlendMask欲做实例预测任务的新基准?
  2. 实验四 使用C++的mfc实现圆心为任意位置的圆的绘制。
  3. 数组的扩展-搜集自无忧脚本
  4. jdk13.0.2安装mysql_centos下的安装mysql,jdk
  5. Mysql存时间不一致_node mysql 存在数据库中的时间和取到前端的时间不一致,请问怎么解决...
  6. Java中静态代码块
  7. 实例解说 fdisk 使用方法
  8. hdu1312---------------DFS模板(调用STL)
  9. c语言 机器语言 汇编语言_多语言机器人新闻记者
  10. oracle怎么下载安装,Oracle数据库下载与安装的完整步骤
  11. 分享积累5年的人工智能网站,很大帮助
  12. 通过腾讯地图查询经纬度及相关信息
  13. 基于Java GUI的资产管理系统的设计与实现
  14. 人工智能基础——知识的表示方法,产生式表示法
  15. “跨次元”检测模型hold住各种画风,真人赛博,在线Demo可玩
  16. 7-7 The Whimper of Universe (30 分)
  17. OpenGL 版本升级
  18. 计算机网络原理fin,一个动画看懂网络原理之TCP建立和释放过程
  19. 如何通过腾讯SOSO问问获得巨大IP流量?
  20. 数据结构:数组和广义表

热门文章

  1. python符号计算_用Python学数学之Sympy代数符号运算
  2. 【深度强化学习】策略梯度 Policy Gradients
  3. Building a Crosswalk application
  4. 学Java怎么看API(详细图解)+查看Java源码(IDEA)
  5. 11.树莓派博通BCM2835芯片手册导读与IO口驱动代码调试和测试
  6. 5月25日第壹简报,星期三,农历四月廿五
  7. 『openframeworks』shader制作六边形马赛克效果
  8. MySQL笔记(持续更新)
  9. flex4.5嵌入网页之WEB
  10. Linux环境下安装及部署Nginx教程