[CEOI 2004] Sweets

桃花红似血

题面

求满足如下不等式的自然数解的数量(模 \(2004\)):

  • \(\forall 1\leq i\leq n, x_i\leq m_i\)
  • \(\sum_{i=1}^nx_i\leq a\)

保证 \(n\leq 10, mi\leq 10^6\)

解法一

考虑生成函数 \(f(x)=\prod_{i=1}^n(1+x+......+x^{m_i})\times\dfrac{1}{1-x}\),显然答案就是 \([x^a]f(x)\)。(最后乘的那个分数起到求前缀和的作用)

使用等比数列求和,化简,有 \(f(x)=\prod_{i=1}^n(1-x^{m_i+1})(1-x)^{-n-1}\)

考虑前半部分是容易求出的,后半部分可以使用广义二项式定理展开,得出 \(f(x)=\prod_{i=1}^n(1-x^{m_i+1})(\sum_{k=0}^{+\infty}\binom{-n-1}{k}(-x)^k)\)

不妨设 \(g(x)=\prod_{i=1}^n(1-x^{m_i+1}), f(x)=g(x)(\sum_{k=0}^{+\infty}\binom{-n-1}{k}(-x)^k)\)。可以 \(O(2^n)\) 枚举 \(g(x)\) 中的项,使用扩展卢卡斯定理计算组合数。

PS:如果没学过广义二项式定理,可以直接对 \((1-x)^{-n-1}\) 强行泰勒/麦克劳林展开,会得到和广义二项式定理一样的结果。这也算是生成函数化简的常见技巧,遇到奇奇怪怪的封闭形式可以一律都泰勒展开。

解法二

假设不会广义二项式定理,也不会泰勒/麦克劳林展开,则可以使用组合意义。

考虑 \({\dfrac{1}{1-x})^{n+1}\) 的组合意义是对 \(y=1\)\(n+1\) 次前缀和,于是可以利用前缀和的组合意义。

具体来说,设 \(h(x)=\dfrac{1}{1-x}\),则 \([x^k]h(x)\) 就是通过 \(n+1\) 次右移操作(每次操作可以移动任意步,可以不移)从 \(0\)\(k\) 的方案数,根据隔板法,方案数是 \(\binom{k+n}{n}=\binom{k+n}{k}=\binom{-n-1}{k}\),后续同解法一。(实际上这就是广义二项式定理的组合解释)

解法三

容斥大法好!

考虑加上一个 \(x_{n+1}=a-\sum_{i=1}^nx_i\)。这样原问题化为要求 \(\sum_{i=1}^{n+1}x_i=a_i\) 的解数。

考虑容斥,答案就是 \(\underset{S\subseteq \{1, 2, ..., n\}}{\sum}(-1)^{|S|}\dbinom{a-\sum_{i\in S}(m_i+1)+n}{n}\)。直接计算即可。

事实上,上述三个方法的代码是一样的......

甚至进行一些恒等变形后会发现它们推出的公式都一模一样。

总结

  • 泰勒展开快速求解生成函数中某些封闭形式
  • 广义二项式定理
  • 生成函数的代数形式和它的组合意义的相伴的,常常要将他们结合考虑,也许某些思路在推导公式过程中,进行了多次组合意义和代数形式的转化。例如写出生成函数是组合意义向代数形式的转换,而解法二为了计算代数形式,再次找到了其组合意义。
posted @ 2025-05-09 13:57  yanzihe  阅读(15)  评论(0)    收藏  举报