網站首頁 編程語言 正文
不定方程的解的個數
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)?
原文鏈接:https://blog.csdn.net/ID246783/article/details/125918474
相關推薦
- 2022-12-08 利用C語言編寫一個無限循環語句_C 語言
- 2023-12-08 uniapp 頁面添加背景圖片不顯示
- 2024-07-18 Spring Security之安全異常處理
- 2022-07-24 .Net結構型設計模式之享元模式(Flyweight)_基礎應用
- 2022-12-12 pycharm?console?打印中文為亂碼問題及解決_python
- 2022-12-11 Django?auth?應用模塊詳解_python
- 2023-04-16 c#?成員類型訪問權限低于字段本身的實現_C#教程
- 2022-05-16 解析Sentry?Relay?二次開發調試_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支