1 条题解

  • 0
    @ 2026-9-3 11:20:18

    A Preponderant Reunion 题解

    思路

    把一次操作暂时放宽为可以减去任意 x∈[1,min⁡(pi,pi+1)]x\in[1,\min(p_i,p_{i+1})]。放宽后的最优方案可以合并相邻的同边操作,使每次实际减去当前两数的最小值,因此最优成本不会改变。

    最终的零位置必须覆盖路径上的每条相邻边。可以证明,存在最优方案使连续零段的长度只为 11 或 22:若需要清空区间 [l,r][l,r],令 cl=plc_l=p_l,ci=max⁡(pi−ci−1,0)c_i=\max(p_i-c_{i-1},0),清空成本为 ∑ci\sum c_i;把长度至少三的零段从末尾拆去两个位置不会增大成本。

    做法

    令 fif_i 表示处理到位置 ii 且最后一个连续零段在 ii 结束时的最小成本,并约定 fj=0f_j=0(j≤0j\le0)。最后的零段有两种情况:

    • 只清空位置 ii,转移为 fi−2+pif_{i-2}+p_i;
    • 清空位置 i−1,ii-1,i,转移为 fi−3+max⁡(pi−1,pi)f_{i-3}+\max(p_{i-1},p_i)。

    因此

    $$f_i=\min\bigl(f_{i-2}+p_i,\ f_{i-3}+\max(p_{i-1},p_i)\bigr).$$

    答案为 min⁡(fn−1,fn)\min(f_{n-1},f_n)。记录每次转移后,从右向左恢复零段,再按从左向右的顺序执行至多三次相邻操作即可完成构造。

    第一档可以把二进制序列压成状态,枚举当前所有相邻的 11 并搜索最少操作数。第二档中每个正数都等于 11,每个连续 11 段从左向右两两配对即可。满档使用上述加权 DP。

    特殊判断程序会模拟输出的每次操作、检查最终状态,并用同一结论的独立成本 DP 验证总代价确为全局最优。

    复杂度

    状态搜索为指数复杂度;二进制段贪心与满分 DP 都是 O(n)O(n) 时间。满分算法使用 O(n)O(n) 空间保存转移并恢复操作。

    • 1

    信息

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