跳转至

圣辇船直营菓子工房的补货:题解

出题人解法:整数拆分的五边形数递推及非递减采购搜索。Codex(GPT-6)将递推整理为稀疏枚举,补齐模运算、证明与实现,并补充完全背包方案。

按花费归类

令 \(P_s\) 为整数 \(s\) 的无序正整数拆分数,\(P_0=1\) .花费为 \(s\le X\) 的采购方案与这样的拆分一一对应:价格就是拆分中的部件。任何部件都不超过 \(X\) ,每种商品购买数也不超过 \(X\) ,因此库存限制不会排除拆分。

\[ A=\sum_{s=0}^{X}(X-s)P_s\pmod{998244353} \]

五边形数递推

Euler 五边形数定理与拆分生成函数给出

\[ P_0=1,\qquad P_s=\sum_{k\ge1}(-1)^{k+1}\left(P_{s-k(3k-1)/2}+P_{s-k(3k+1)/2}\right) \]

负下标的值定义为零。简要推导:拆分生成函数乘以 \(\prod_{i\ge1}(1-z^i)\) 等于一;将乘积按五边形数定理展开,比较正次数的系数并移项,就得到上述递推。因此按花费递增计算可以得到全部计数,再按余款加权求和。

只枚举不超过当前花费的广义五边形数,每项是已知的较小下标。减法后加模数再取模,保持余数非负。

复杂度与方案选择

每个花费仅有 \(O(\sqrt X)\) 个有效偏移,总时间 \(O(X\sqrt X)\) ,空间 \(O(X)\) ;零预算单独看作常数工作。使用 64 位整数保存加权乘积,模后计数乘以预算不会超过 \(80(998244353-1)\) .

std.cpp 使用稀疏的五边形数递推。逐个扫描所有小于当前花费的下标、跳过零系数,得到相同递推但需 \(O(X^2)\) 时间;稀疏枚举保留算法而减少无效项。

另外提供两种完整说明与程序:

  • 完全背包:时间 \(O(X^2)\) 、空间 \(O(X)\) ,证明直接,不依赖五边形数定理;当前范围内可通过。
  • 非递减搜索:直接枚举采购方案,空间 \(O(X)\) ,时间随拆分数量增长。作为枚举方案的备用实现保留,适用性能见其说明;不据此收紧或改变题目范围。

这是对经典拆分恒等式的应用,五边形数定理不属于本题实现者的原创贡献。