1 条题解

  • 0
    @ 2026-8-28 1:26:33

    天增与彩球:题解

    思路

    令 dpidp_i 表示只考虑原序列前 ii 个球时最多能够删除的球数,dp0=0dp_0=0。

    最后一个球可以不参与任何新操作,此时答案为 dpi−1dp_{i-1}。若最后一次新操作的两个端点是 jj 和 ii,其中 j<ij<i 且 aj=aia_j=a_i,那么在它之前只能使用前 j−1j-1 个位置,随后一次删除区间 [j,i][j,i],得到

    $$dp_i=\max\left(dp_{i-1},\max_{j<i,\ a_j=a_i}\{dp_{j-1}+i-j+1\}\right).$$

    这一定可行:先完成前 j−1j-1 个位置中的操作,再删除当前仍相邻区间中从原位置 jj 到原位置 ii 的所有球。反过来,任意最优方案若使用了位置 ii,取包含它的最后一次删除操作,其左端点必为某个同色位置 jj,操作前能从更左侧删除的数量至多为 dpj−1dp_{j-1},因此转移也给出了上界。

    做法

    子任务 1:状态搜索

    当 n≤10n\le10 时,用一个二进制掩码表示尚未删除的原位置。枚举当前序列中所有同色端点,删除它们之间的所有剩余位置并递归,记忆化每个掩码的最优值。该方法直接模拟题意,最坏状态数为 2n2^n,每个状态枚举 O(n2)O(n^2) 对端点。

    子任务 2:二次动态规划

    直接按上述公式枚举 ii 与所有 j<ij<i,时间复杂度为 O(n2)O(n^2),空间复杂度为 O(n)O(n)。

    子任务 3:按颜色维护最优转移

    把第二项改写为

    i+max⁡j<i, aj=ai(dpj−1−j+1).i+\max_{j<i,\ a_j=a_i}(dp_{j-1}-j+1).

    对每种颜色 cc 维护

    bestc=max⁡j<i, aj=c(dpj−1−j+1).best_c=\max_{j<i,\ a_j=c}(dp_{j-1}-j+1).

    处理位置 ii 时,先用旧的 bestaibest_{a_i} 更新 dpidp_i,再把位置 ii 作为未来区间的左端点,用 dpi−1−i+1dp_{i-1}-i+1 更新 bestaibest_{a_i}。每个位置只做常数次操作。

    复杂度

    • 状态搜索:O(2nn2)O(2^n n^2) 时间、O(2n)O(2^n) 空间;
    • 二次动态规划:O(n2)O(n^2) 时间、O(n)O(n) 空间;
    • 完整算法:每个测试用例 O(n)O(n) 时间、O(n)O(n) 空间。

    所有测试用例的长度总和不超过 2×1052\times10^5,因此完整算法满足限制。

    边界情况

    • 所有颜色互不相同时不能进行操作,答案为 00;
    • 所有颜色相同时可一次删除全部球,答案为 nn;
    • 更新同一颜色的 best 时必须使用 dpi−1dp_{i-1},否则会把包含位置 ii 的方案错误地再次用作以 ii 为左端点的历史状态;
    • 区间长度为 i−j+1i-j+1,两个端点都要计入。
    • 1

    信息

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