1780 字
9 分钟
形式幂级数1-计数问题的多项式视角

形式幂级数1-计数问题的多项式视角#

概要#

某些计数计算可以和对多项式、形式幂级数的计算联系起来。本文将会通过一些例题说明如何构建计数问题的多项式视角,但不会说明具体的求解方法。

概念引入#

例1

给定集合 A={2,3}A=\{2,3\},B={2,4}B=\{2,4\},C={3,5,7}C=\{3,5,7\}。从每个集合中各选 11 个元素 a,b,ca,b,c。有多少种选法能使得 a+b+c=na+b+c=n?

题解

解:[xn](x2+x3)(x2+x4)(x3+x5+x7)[x^{n}](x^{2}+x^{3})(x^{2}+x^{4})(x^{3}+x^{5}+x^{7})。

nn 次项系数#

对于例1,设多项式 f=(x2+x3)(x2+x4)(x3+x5+x7)f=(x^{2}+x^{3})(x^{2}+x^{4})(x^{3}+x^{5}+x^{7}),则 [xn]f[x^n]f 表示 ff 中 xnx^{n} 的系数,这个符号将在后文中高频出现,不再赘述。

基于分配律的解释#

一般来说,计算 (a1+a2+⋯ )(b1+b2+⋯ )(c1+c2+⋯ )(a_{1}+a_{2}+\cdots)(b_{1}+b_{2}+\cdots)(c_{1}+c_{2}+\cdots) 这样的乘积时,结果就是把所有形如 aibjcka_{i}b_{j}c_{k} 的乘积各加一次。本题中:

  • 选择 x2x^{2} 或 x3x^{3}
  • 选择 x2x^{2} 或 x4x^{4}
  • 选择 x3x^{3}、x5x^{5} 或 x7x^{7}
  • 把选到的项的乘积全部加起来

这样就能算出 f=(x2+x3)(x2+x4)(x3+x5+x7)f=(x^{2}+x^{3})(x^{2}+x^{4})(x^{3}+x^{5}+x^{7})。若选择的项分别是 xa,xb,xcx^{a},x^{b},x^{c},那么它们的乘积就是 xa+b+cx^{a+b+c}。因此 [xn]f[x^{n}]f 与满足 a+b+c=na+b+c=n 的 (a,b,c)(a,b,c) 的选法总数一致。

基于状态转移的解释#

当我们对每个状态都计算了某个值时,可以把计算结果保存成一个多项式。原则上让“多项式的次数”表示“正在考虑的状态”,让“系数”表示该状态上的“计算出的值”(多数情况下是计数结果)。

简单地说,ff 等价于 dp[]dp[],[xn]f[x^n]f 等价于 dp[n]dp[n]。

在例1中,我们把“和的数值”作为状态(多项式幂次),把“能用多少种方式得到这个和”作为值(多项式系数),来更新多项式。

  • 什么都还没选的状态 →\to 11,或者说 1⋅x01\cdot x^0
  • 选择集合 AA 的元素 →\to x2+x3x^{2}+x^{3}(可以理解为和为2或3的情况都只有一种,即 dp[2]=dp[3]=1dp[2]=dp[3]=1,这里 dp[i]dp[i] 表示和为 ii 的选法数量)
  • 再选择集合 BB 的元素 →\to ???(这里是问题)
    • 从 BB 中选 22 时 →\to (x2+x3)x2(x^{2}+x^{3})x^{2}。
    • 从 BB 中选 44 时 →\to (x2+x3)x4(x^{2}+x^{3})x^{4}。
    • 合起来 →\to (x2+x3)(x2+x4)(x^{2}+x^{3})(x^{2}+x^{4})。

从 BB 中选择元素,等价于有“把当前状态 +2+2”和“把当前状态 +4+4”的两个选项。像这样,把所有状态同时平移一个常数的操作,可以表示为乘上 xnx^{n}。于是我们可以用多项式乘法表示状态转移,然后让我们继续推导,

  • 假设选完集合 BB 时,已经得到多项式 gg。
  • 继续选择集合 CC 的元素
    • 从 CC 中选 33 → gx3gx^{3}。
    • 从 CC 中选 55 → gx5gx^{5}。
    • 从 CC 中选 77 → gx7gx^{7}。
    • 合起来 → g(x3+x5+x7)g(x^{3}+x^{5}+x^{7})。

可以看到,选一个元素这件事就变成了乘上某个多项式的操作。什么都还没选的状态是 11,经过从 A,B,CA,B,C 中的选择之后,最终得到多项式 f=(x2+x3)(x2+x4)(x3+x5+x7)f=(x^{2}+x^{3})(x^{2}+x^{4})(x^{3}+x^{5}+x^{7})。

更多的例题#

一维问题#

例2

有 22 个苹果、33 个橘子、44 个葡萄出售。一共买 nn 个水果的方法有多少种?(同种水果之间不区分)

题解

解:[xn](1+x+x2)(1+x+x2+x3)(1+x+x2+x3+x4)[x^{n}](1+x+x^{2})(1+x+x^{2}+x^{3})(1+x+x^{2}+x^{3}+x^{4})

例3

苹果、橘子、葡萄都有无限多个出售。一共买 nn 个的方法有多少种?(同种水果之间不区分)

题解

解:令 f=∑n=0∞xn=1+x+x2+x3+x4+x5+⋯f=\sum_{n=0}^{\infty}x^{n}=1+x+x^{2}+x^{3}+x^{4}+x^{5}+\cdots(无限继续),则答案是 [xn]f3[x^{n}]f^{3}。在算法题中,nn 往往是一个有限数值,在算法实现时我们一般只需要保存 nn 次幂以内的系数。

例4

有重量为 w1w_{1} 的物品、重量为 w2w_{2} 的物品、……、重量为 wkw_{k} 的物品各 11 个。装进承重 WW 的包中有多少种方法?(忽略装入顺序;也可以一个都不选)

题解

解:∑n=0W[xn]∏i=1k(1+xwi)\sum_{n=0}^{W}[x^{n}]\prod_{i=1}^{k}(1+x^{w_{i}})

例5

令 N,MN,M 为正整数。统计满足如下条件的整数列 A1,…,ANA_{1},\ldots,A_{N} 数量:

  • 0<A1≤A2≤⋯≤AN=M0<A_{1}\leq A_{2}\leq\cdots\leq A_{N}=M
  • 对任意 1≤i≤N−11\leq i\leq N-1,都有 3≤Ai+1−Ai≤53\leq A_{i+1}-A_{i}\leq 5
题解

解:令 f=∑n=1∞xn,g=x3+x4+x5f=\sum_{n=1}^{\infty}x^n, g=x^{3}+x^{4}+x^{5},则答案是 [xM]f⋅gN−1[x^M]f\cdot g^{N-1}。

这里多项式 ff 是状态转移的初始状态(用于表示 A1A_1 的状态),gg 则表示状态转移(每一步可能 +3,+4,+5+3,+4,+5),因为 AN=MA_N=M,所以最后只需要取出 MM 次项的系数。

例6

令 N,MN,M 为正整数。统计满足如下条件的整数列 A1,…,ANA_{1},\ldots,A_{N} 数量:

  • 0<A1≤A2≤⋯≤AN<M0<A_{1}\leq A_{2}\leq\cdots\leq A_{N}<M
  • 对任意 1≤i≤N−11\leq i\leq N-1,都有 3≤Ai+1−Ai≤53\leq A_{i+1}-A_{i}\leq 5
题解

解:这题与例5高度相似,有两种思路可以解决:

  1. ∑m=1M−1[xm]f⋅gN−1\sum_{m=1}^{M-1}[x^m]f\cdot g^{N-1}。也就是根据最终状态分类统计。
  2. [xM]f⋅gN−1⋅f[x^M]f\cdot g^{N-1}\cdot f。因为 AN<MA_N\lt M,所以我们可以补一个条件 AN+1=M,AN+1−AN>0A_{N+1}=M,A_{N+1}-A_N\gt 0。
例7

投掷标准骰子 100100 次。求点数之和为 nn 的概率。

题解

解:令 f=16(x+x2+x3+x4+x5+x6)f=\frac{1}{6}(x+x^{2}+x^{3}+x^{4}+x^{5}+x^{6}),则答案是 [xn]f100[x^{n}]f^{100}。

这里构造了一个以每个“状态”的“概率”为系数的多项式。可以把它理解为:让状态 +1,+2,…,+6+1,+2,\ldots,+6 的方式各有 1/61/6 个。

例8

实数 p,qp,q 满足 p+q=1p+q=1。一开始位于数轴原点,每次投掷一枚“正面概率为 pp、反面概率为 qq 的硬币”,若为正面就向正方向走 11 步,若为反面就向负方向走 11 步。投掷硬币 100100 次后,位于 x=nx=n 的概率是多少?

题解

解:令 f=(px+qx−1)f=(px+qx^{-1}),则答案是 [xn]f100[x^{n}]f^{100}。

在编程实现时,负下标不好处理,因此可以添加一个偏移量:[xn+100]x100(px+qx−1)100[x^{n+100}]x^{100}(px+qx^{-1})^{100}。因此也等于 [xn+100](px2+q)100[x^{n+100}](px^{2}+q)^{100}。这样,计算对象中就消除了负次幂项。

例9

考虑把正整数 NN 表示为 N=a1+a2+⋯+akN=a_{1}+a_{2}+\cdots+a_{k}(其中 aia_{i} 为正整数)的形式(要区分不同顺序)。对这样的分割,把它的“美丽度”定义为 ∏i=1kai2\prod_{i=1}^{k}a_{i}^{2}。求所有分割的“美丽度”之和。

题解

解:令 f=∑k=1∞k2xk=x+4x2+9x4+⋯f=\sum_{k=1}^{\infty}k^2x^k = x + 4x^2 + 9x^4+\cdots,则答案是 [xN]∑n=0∞fn[x^N]\sum_{n=0}^{\infty}f^n。

这是一个较难的例子,虽然仍然是构造一个对每个“状态”保存“值”的多项式,但这里让值保存的是“美丽度之和”。第 nn 次转移中,如果把“状态”推进 kk,那么“值”会变为原来的 k2k^{2} 倍,所以得到这种形式。

高维问题#

高维问题中多项式往往很难高速计算,除非具有很好的结构。

例10

有如下商品:

  • 商品 A:价格 33 元,重量 44 克
  • 商品 B:价格 55 元,重量 66 克

每种最多可以买 22 个。正好花 nn 元、重量为 mm 克的方法有多少种?

题解

解:令 f=1+x3y4+x6y8f=1+x^{3}y^{4}+x^{6}y^{8},g=1+x5y6+x10y12g=1+x^{5}y^{6}+x^{10}y^{12},则答案是 [xnym]fg[x^{n}y^{m}]fg。

例11

有无限多枚 11 元、55 元、1010 元硬币。正好使用 nn 枚并正好支付 mm 元的方法数是多少?

题解

解:令 f1=∑n=0∞xnynf_{1}=\sum_{n=0}^{\infty}x^{n}y^{n},f5=∑n=0∞x5nynf_{5}=\sum_{n=0}^{\infty}x^{5n}y^{n},f10=∑n=0∞x10nynf_{10}=\sum_{n=0}^{\infty}x^{10n}y^{n},则答案是 [xmyn]f1f5f10[x^{m}y^{n}]f_{1}f_{5}f_{10}。

例12

从二维坐标平面上的原点出发,进行随机游走。也就是说,当位于 (x,y)(x,y) 时,反复以相等概率移动到 (x±1,y)(x\pm1,y)、(x,y±1)(x,y\pm1)。每 11 秒移动 11 次。求 TT 秒后位于 (a,b)(a,b) 的概率。

题解

解:令 f=(x+x−1+y+y−1)/4f=(x+x^{-1}+y+y^{-1})/4,则答案是 [xayb]fT[x^{a}y^{b}]f^{T}。

bonus:https://www.zhihu.com/question/310998719/answer/593071401。

例13

有 33 个变量 X,Y,ZX,Y,Z,初始时它们的值全都是 00。一次操作中,可以做以下任意一种:

  • 选择 11 个变量,加上 11 或 −1-1
  • 给所有变量同时加上 11,或同时加上 −1-1

NN 次操作后,满足 X=pX=p、Y=qY=q、Z=rZ=r 的操作序列有多少种?

题解

令 f=x+x−1+y+y−1+z+z−1+xyz+(xyz)−1f=x+x^{-1}+y+y^{-1}+z+z^{-1}+xyz+(xyz)^{-1},则答案是 [xpyqzr]fN[x^{p}y^{q}z^{r}]f^{N}。

形式幂级数1-计数问题的多项式视角
https://fuwari.vercel.app/posts/formal_power_series1/fps1/
作者
st1vdy
发布于
2026-06-07
许可协议
CC BY-NC-SA 4.0