1 条题解

  • 0
    @ 2026-9-3 11:16:13

    严格递增改造 题解

    思路

    令 bi=ai−ib_i=a_i-i,修改后的数组严格递增,等价于修改后的 bb 非递减。目标变成最小化 ∑∣bi−ci∣\sum|b_i-c_i|,其中 cc 非递减。

    最优 cic_i 一定可以取自原数组 bb 的某个值。将所有 bib_i 排序去重为 v1<⋯<vmv_1<\cdots<v_m,即可在这些候选值上动态规划。

    做法

    子任务 1 枚举小值域内的所有严格递增目标数组并直接计算代价。

    子任务 2 设 dpi,jdp_{i,j} 表示前 ii 项且 ci=vjc_i=v_j 的最小代价,直接枚举前一项候选 k≤jk\le j,复杂度 O(nm2)O(nm^2)。

    满分算法维护前一行的前缀最小值:

    dpi,j=∣bi−vj∣+min⁡k≤jdpi−1,k.dp_{i,j}=|b_i-v_j|+\min_{k\le j}dp_{i-1,k}.

    这样每层只需线性扫描全部候选值。

    正确性证明

    减去下标把“严格递增”与“非递减”一一对应且不改变每项修改代价。对固定相邻候选区间,若某个 cic_i 不等于任一输入 bb 值,将其移动到最近端点不会破坏非递减性,也不会增大绝对值和,因此只需考虑候选集合。动态规划枚举了所有非递减候选序列,并对每个末值取最小代价,所以所得答案最优。

    复杂度

    满分算法时间复杂度 O(n2)O(n^2),空间复杂度 O(n)O(n)。

    • 1

    信息

    ID
    1480
    时间
    5000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者