1 条题解
-
0
题解
思路
设第 种元素取 个。组合数是满足 且 的向量数;固定向量对应的排列数为 。
因此组合数是
排列数是
$$r![x^r]\prod_i\left(1+x+\frac{x^2}{2!}+\cdots+\frac{x^{k_i}}{k_i!}\right).$$若 可直接输出
0 0,所以真正参与计算的次数不超过 。做法
tiny:枚举取用数量
深度优先枚举每个 ,到末尾检查总和,并用逆阶乘累加排列贡献。
medium:背包卷积
依次加入每一种元素。组合 DP 转移权为 ;排列的指数生成函数 DP 转移权为 。最后给排列系数乘 。
特殊性质
此时所有元素互异。若 ,组合数为 ,排列数为 ;否则均为 。
满分:NTT 分治乘积
组合数仍可用滑动窗口背包在 内求出。排列数把每个多项式
放入分治乘积树,用 NTT 合并,并在每次合并后截断到 次。最终取 系数乘 。
正确性证明
组合生成函数中,从第 个因子选择 恰好表示取 个第 种元素,系数均为 ,故 系数恰为全部合法计数向量数。
指数生成函数中,同一选择的系数为 。乘以 后得到该多重集合排列的多项式系数 。对所有合法向量求和即为排列总数。NTT 只改变多项式乘法的计算方式,截断高于 的项不可能影响 系数,所以答案正确。
复杂度
- tiny:取决于枚举状态数;
- medium: 时间, 空间;
- 特殊性质: 时间;
- 满分:组合 DP 为 ,排列乘积为 ,其中 ;空间 。
- 1
信息
- ID
- 1040
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 0
- 上传者