这两天讲的计数给我写爽了。
P14686 ICPC 2025 Yokohama R Charity Raffle
这题是个人物,不简单。
考虑这样一个模型,\(f_{n, m, k}\) 表示 \(n\) 个非负整数数,和为 \(k\),最大值不超过 \(m\) 的总方案数,这个问题有一个拓展的版本来自 OI-Wiki(容斥原理 - OI Wiki),所谓"不定方程非负整数解计数":给出不定方程 \(\sum_{i = 1}^n x_i = k\) 和 \(n\) 个限制条件 \(x_i \le b_i\),其中 \(k, b_i \in \Bbb{N}\),求方程的非负整数解的个数,可以自行拓展阅读。在这道题就是 \(b_i = m\),先考虑如果没有 \(x_i \le b_i\) 的限制,那么相当于求 \(n\) 个非负整数和为 \(k\) 的方案数,经典地:将 \(k\) 视为 \(k\) 个 \(1\),即 \(k\) 个不区分编号的小球,放入 \(n\) 个区分编号的袋子。这个问题直接做不好做,可以认为是 \(k\) 个小球中间插 \(n - 1\) 个板,每两个板之间就是一个袋子所包含的小球,但是由于一个空隙中可以插入多个板子,仍然不好做,再次转化为:共 \(n + k - 1\) 个位置,选 \(n - 1\) 个变为板或者选 \(k\) 个变为小球,思路瞬间清晰,方案 \(|U| = C_{n + k - 1}^{k}\)。OK,那么现在把 \(f_{n, m, k}\) 转化为容斥模型:
-
全集 \(U\):不定方程 \(\sum_{i=1}^n x_i = k\) 的非负整数解
-
元素:变量 \(x_i\)
-
属性:\(x_i\) 的属性即 \(x_i\) 满足的条件,即 \(x_i \le b_i\) 的条件
目标:所有变量满足对应属性时集合的大小,即 \(|\bigcap_{i=1}^n S_i|\)。
求交集的套路展开:
\\|\\bigcap_{i=1}\^n S_i\| = \|U\| - \|\\bigcup_{i=1}\^n \\overline{S_i}\|\\\\ \|\\bigcup_{i=1}\^n \\overline{S_i}\| = \\sum_{\|A\| = 1}\^n (-1)\^{\|A\| - 1} \\sum \|\\bigcap \\overline{S_{A_i}}\| \\
这个好做吗?好像也不大好做QwQ
首先能排除选哪些 \(x_i \ge m + 1\),\(C_{n}^{|A|}\),然后是怎么转化后面的问题,由于有 \(|A|\) 个 \(x_i \ge m + 1\),不妨直接假设在这个 \(x_i\) 个位置上面本身就有 \(m + 1\),问题竟然转化为了在 \(n\) 个数和为 \(k - (m + 1) \times |A|\) 的方案数,太巧妙了,直接算
\f_{n, m, k} = \|U\| - \\sum_{\|A\| = 1}\^{\\min(n, \\lfloor \\frac{k}{m + 1} \\rfloor)} (-1)\^{\|A\| - 1} \\times C_{n}\^{\|A\|} \\times C_{n + k - (m + 1) \\times \|A\|}\^{n - 1} \\
对于这道题剩下的部分还有点复杂,先搁着,但是打表发现答案为 \(f_{n, m, k} - f_{n, m - 1, k - 1}\)。