形式幂级数1-计数问题的多项式视角
概要
某些计数计算可以和对多项式、形式幂级数的计算联系起来。本文将会通过一些例题说明如何构建计数问题的多项式视角,但不会说明具体的求解方法。
概念引入
例1给定集合 ,,。从每个集合中各选 个元素 。有多少种选法能使得 ?
题解
解:。
次项系数
对于例1,设多项式 ,则 表示 中 的系数,这个符号将在后文中高频出现,不再赘述。
基于分配律的解释
一般来说,计算 这样的乘积时,结果就是把所有形如 的乘积各加一次。本题中:
- 选择 或
- 选择 或
- 选择 、 或
- 把选到的项的乘积全部加起来
这样就能算出 。若选择的项分别是 ,那么它们的乘积就是 。因此 与满足 的 的选法总数一致。
基于状态转移的解释
当我们对每个状态都计算了某个值时,可以把计算结果保存成一个多项式。原则上让“多项式的次数”表示“正在考虑的状态”,让“系数”表示该状态上的“计算出的值”(多数情况下是计数结果)。
简单地说, 等价于 , 等价于 。
在例1中,我们把“和的数值”作为状态(多项式幂次),把“能用多少种方式得到这个和”作为值(多项式系数),来更新多项式。
- 什么都还没选的状态 ,或者说
- 选择集合 的元素 (可以理解为和为2或3的情况都只有一种,即 ,这里 表示和为 的选法数量)
- 再选择集合 的元素 ???(这里是问题)
- 从 中选 时 。
- 从 中选 时 。
- 合起来 。
从 中选择元素,等价于有“把当前状态 ”和“把当前状态 ”的两个选项。像这样,把所有状态同时平移一个常数的操作,可以表示为乘上 。于是我们可以用多项式乘法表示状态转移,然后让我们继续推导,
- 假设选完集合 时,已经得到多项式 。
- 继续选择集合 的元素
- 从 中选 → 。
- 从 中选 → 。
- 从 中选 → 。
- 合起来 → 。
可以看到,选一个元素这件事就变成了乘上某个多项式的操作。什么都还没选的状态是 ,经过从 中的选择之后,最终得到多项式 。
更多的例题
一维问题
例2有 个苹果、 个橘子、 个葡萄出售。一共买 个水果的方法有多少种?(同种水果之间不区分)
题解
解:
例3苹果、橘子、葡萄都有无限多个出售。一共买 个的方法有多少种?(同种水果之间不区分)
题解
解:令 (无限继续),则答案是 。在算法题中, 往往是一个有限数值,在算法实现时我们一般只需要保存 次幂以内的系数。
例4有重量为 的物品、重量为 的物品、……、重量为 的物品各 个。装进承重 的包中有多少种方法?(忽略装入顺序;也可以一个都不选)
题解
解:
例5令 为正整数。统计满足如下条件的整数列 数量:
- 对任意 ,都有
题解
解:令 ,则答案是 。
这里多项式 是状态转移的初始状态(用于表示 的状态), 则表示状态转移(每一步可能 ),因为 ,所以最后只需要取出 次项的系数。
例6令 为正整数。统计满足如下条件的整数列 数量:
- 对任意 ,都有
题解
解:这题与例5高度相似,有两种思路可以解决:
- 。也就是根据最终状态分类统计。
- 。因为 ,所以我们可以补一个条件 。
例7投掷标准骰子 次。求点数之和为 的概率。
题解
解:令 ,则答案是 。
这里构造了一个以每个“状态”的“概率”为系数的多项式。可以把它理解为:让状态 的方式各有 个。
例8实数 满足 。一开始位于数轴原点,每次投掷一枚“正面概率为 、反面概率为 的硬币”,若为正面就向正方向走 步,若为反面就向负方向走 步。投掷硬币 次后,位于 的概率是多少?
题解
解:令 ,则答案是 。
在编程实现时,负下标不好处理,因此可以添加一个偏移量:。因此也等于 。这样,计算对象中就消除了负次幂项。
例9考虑把正整数 表示为 (其中 为正整数)的形式(要区分不同顺序)。对这样的分割,把它的“美丽度”定义为 。求所有分割的“美丽度”之和。
题解
解:令 ,则答案是 。
这是一个较难的例子,虽然仍然是构造一个对每个“状态”保存“值”的多项式,但这里让值保存的是“美丽度之和”。第 次转移中,如果把“状态”推进 ,那么“值”会变为原来的 倍,所以得到这种形式。
高维问题
高维问题中多项式往往很难高速计算,除非具有很好的结构。
例10有如下商品:
- 商品 A:价格 元,重量 克
- 商品 B:价格 元,重量 克
每种最多可以买 个。正好花 元、重量为 克的方法有多少种?
题解
解:令 ,,则答案是 。
例11有无限多枚 元、 元、 元硬币。正好使用 枚并正好支付 元的方法数是多少?
题解
解:令 ,,,则答案是 。
例12从二维坐标平面上的原点出发,进行随机游走。也就是说,当位于 时,反复以相等概率移动到 、。每 秒移动 次。求 秒后位于 的概率。
题解
解:令 ,则答案是 。
bonus:https://www.zhihu.com/question/310998719/answer/593071401。
例13有 个变量 ,初始时它们的值全都是 。一次操作中,可以做以下任意一种:
- 选择 个变量,加上 或
- 给所有变量同时加上 ,或同时加上
次操作后,满足 、、 的操作序列有多少种?
题解
令 ,则答案是 。