1 条题解

  • 0
    @ 2026-10-23 20:48:07

    数上动态规划

    算法思路

    设序列中的最大值为 MM。枚举公约数 dd,其中 1≤d≤M1 \le d \le M。

    对于每个 dd,扫描整个序列,将所有能被 dd 整除的数相加,得到 TdT_{d}。由于所有元素均为正数,这样可以得到由 dd 的倍数组成的选择方案中的最大元素和。

    将答案初始化为 00,每次用 d×Tdd \times T_{d} 更新答案,最后输出最大值。

    注意,这些数的实际最大公约数可能大于 dd,但不会影响最终答案的正确性。

    正确性证明

    对于任意 dd,若选出了至少一个数,则这些数的实际最大公约数 HH 满足 H≥dH \ge d。因此,候选值 d×Tdd \times T_{d} 不超过该选择方案的真实价值,也就不会超过最优值。若没有选出任何数,则候选值为 00,同样不会超过最优值。

    设最优方案的元素和为 SS,最大公约数为 GG。这些元素都能被 GG 整除。由于所有元素均为正数,枚举到 d=Gd=G 时,有 TG≥ST_{G} \ge S,因此候选值 G×TGG \times T_{G} 不小于最优值 G×SG \times S。

    综上,算法既不会高估答案,也不会遗漏最优值,因此算法正确。

    复杂度分析

    共枚举 MM 个公约数,每次扫描 nn 个元素,时间复杂度为 O(nM)O(nM),其中 M≤1000M \le 1000。

    存储序列需要 O(n)O(n) 空间,除此之外只需要 O(1)O(1) 的额外空间。

    • 1

    信息

    ID
    723
    时间
    1000ms
    内存
    256MiB
    题目 Rating
    1400
    标签
    递交数
    14
    已通过
    12
    上传者