1 条题解
-
0
题解
思路
记 为长度为 的全一数。若表示中 的净使用次数为整数 ,则
$$n=\sum_{k\ge1}x_kR_k,\qquad \text{cost}=\sum_{k\ge1}k|x_k|.$$正负各一个相同长度的全一数可直接抵消,所以只需考虑净次数。
从低位到高位编号为 。令
即 是所有长度超过 的全一数在第 位上的净系数。于是
这把原问题化为一个带进位的最短路。
做法
子任务一:整数图最短路
当 时,把一定范围内的每个整数当作顶点。对于每个 ,从 向 和 连边,边权为 。从 到 的最短路就是答案。小范围内只需使用长度不超过 的全一数,并保留足够大的正负值边界。
支线子任务:输入本身为全一数
若 ,直接使用它需要 个 。任何只使用不足 个 的表示,其绝对值都严格小于 ,因而答案恰为 。
子任务三:显式活跃数量 DP
在某一位上,设仍覆盖这一位的正全一数有 个,负全一数有 个。向更高位移动时, 只能减小,因为某些数在当前位结束。若入进位为 ,则当前数位由 对 取模得到,同时产生新进位。每处理一位,代价增加 。
对一类活跃数量做后缀最小值,对另一类显式枚举新数量,即可处理不超过八位的输入。
满分做法:系数差分与进位 DP
设 为 的第 个十进制数位, 为进入该位的进位。数位等式为
因此一旦知道相邻两个进位,就有
处理到第 位时,状态只需保留 。枚举 后,可以计算 与 ,并加上
这正是长度为 的全一数的贡献。在最高位后补一个零,最后将系数回归到零。
对任意五十位数,直接按相邻数位差构造表示,正、负活跃数量都不会超过 。经过抵消规范化,最优解也可限制在该范围内,从而进位绝对值不超过 。所以每层只需枚举 种进位。
复杂度
设十进制位数为 ,进位状态数为常数 。满分做法的时间复杂度为 ,空间复杂度为 。
- 1
信息
- ID
- 1274
- 时间
- 3000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 0
- 上传者