1 条题解
-
0
题解
思路
设 ,最终公共值写成 。把 ,则把 增加到公共值的最少操作数是 。问题等价于
$$\min_{t\ge0}\sum_{i=1}^{n}\operatorname{popcount}(t+b_i).$$存在最优解满足 ,因此只需考虑有限位二进制数。
做法
子任务 1:枚举公共值偏移
枚举 ,直接计算所有 的二进制一的个数之和。时间复杂度为 。
子任务 2:两个数的数位动态规划
当 时,只有 。从低位到高位枚举 的当前位,状态只需记录 向当前位传来的进位。转移代价是 当前位与 当前位的一的个数,状态数为常数。
子任务 3:进位后缀动态规划
逐位决定 。处理第 位前,只看每个 的低 位。若按 排序,那么加上同一个 后,产生进位的元素一定构成一个后缀。因此状态只需记录这个后缀的长度 。
设 表示已经决定 的前 位、恰有排序后末尾 个数向第 位进位时,已经产生的最小一位数总和。
尝试令 的第 位为 或 。预处理当前排序中第 位为零和为一的前缀数量,即可在 时间算出:
- 当前所有 在第 位产生多少个一;
- 下一位产生进位的元素数量。
每处理完一位,用当前位对下标作稳定的零一分组,即得到按低一位更长余数排序的次序。处理足够多的高位后要求最终进位数为零。
正确性证明
引理 1
固定公共值 时,最少操作数为 。
证明。 每次操作增加一个二的幂。把差值写成若干二的幂所需的最少项数,正是其二进制表示中一的个数;不同元素之间的操作互不影响。
引理 2
处理低 位时,产生向第 位进位的 在按 排序后构成一个后缀。
证明。 产生进位当且仅当 。右侧阈值固定,所有达到阈值的余数恰为排序后的一个后缀。
引理 3
状态 包含决定下一位所需的全部信息。
证明。 由引理 2, 唯一确定哪些元素带进位。结合这些元素的 第 位和候选的 第 位,可以唯一确定每个和的当前位以及下一位进位;更低位不再影响后续。
定理
进位后缀动态规划得到最少操作次数。
证明。 由引理 1,目标是最小化所有二进制一的总数。动态规划枚举 的每一位;由引理 3,转移既无遗漏也无重复,并精确累计当前位代价。最终无进位状态覆盖所有有限非负 ,取最小值即全局最优。
复杂度
设有效二进制位数为 。满分算法时间复杂度为 ,空间复杂度为 。
- 1
信息
- ID
- 1222
- 时间
- 5000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 0
- 上传者