1 条题解

  • 0
    @ 2026-9-3 11:00:43

    题解

    思路

    设入口 (i) 的人工防守区间为 (I_i),连接的发电机工作区间为 (J)。从该入口进入的僵尸数为

    [ x-|I_i\cup J|=x-m-|I_i|+|I_i\cap J|. ]

    前半部分固定,因此要最大化所有交集长度之和。

    所有发电机区间长度相同。把入口按 (l_i+r_i),也就是人工区间中点的两倍排序后,固定若干发电机位置时,每个入口一定选择中点最近的发电机。因此每台发电机负责排序后的一段连续入口。

    做法

    记 (w(l,r)) 为只用一台发电机负责第 (l) 到第 (r) 个入口时,这一段能够得到的最大贡献,贡献已经包含

    [ \sum_{i=l}^{r}(x-m-(r_i-l_i)). ]

    一台发电机的启动时刻连续移动时,交集和是分段一次函数。若启动时刻没有碰到任何 (l_i),结束时刻也没有碰到任何 (r_i),向左或向右移动至少有一个方向不劣。因此最优启动时刻可取自

    [ {l_i}\cup{r_i-m}, ]

    并在边界 (0) 与 (x-m) 处截断。

    子任务 1

    枚举 (k) 台发电机的全部非降启动时刻。对每个入口选择交集最大的发电机,直接计算答案。

    子任务 2

    枚举左端点 (l),逐步加入右端点 (r)。维护每个候选启动时刻与当前区间段的交集和,扫描全部候选即可得到 (w(l,r))。共有 (O(n^2)) 个区间段和 (O(n)) 个候选,预处理为 (O(n^3))。

    随后做分段动态规划:

    [ dp_{g,r}=\max_{l\le r}{dp_{g-1,l-1}+w(l,r)}. ]

    满分算法

    交集长度关于启动时刻是三段式一次函数。按 (l) 从 (r) 向左扩展时,用树状数组维护所有候选时刻上的斜率与常数,即可快速加入一个入口。

    矩阵 (w) 满足四边形不等式,其最优候选时刻满足决策单调性:

    [ opt(l,r-1)\le opt(l,r)\le opt(l+1,r). ]

    只在两个已知决策之间扫描,就能求出全部 (w(l,r))。外层分段 DP 同样具有单调决策,可用分治优化计算每一层。由于 (k\le n),整体能通过 (n=2000)。

    正确性说明

    容斥恒等式把目标精确转化为最大化交集和。等长发电机区间的最优匹配按中点保持顺序,所以每台发电机负责一个连续段,不会漏掉最优解。分段一次函数的斜率只有在 (l_i) 或 (r_i-m) 处变化,因此候选启动时刻集合完备。(w(l,r)) 精确表示一台发电机负责该段的最优贡献,分段 DP 枚举最后一段的左端点,故无重无漏。满分算法只用四边形不等式缩小扫描区间,没有删除最优决策,答案保持不变。

    复杂度

    子任务 1 枚举启动时刻;子任务 2 时间复杂度 (O(n^3+kn^2)),空间复杂度 (O(n^2));满分算法时间复杂度 (O(n^2\log n)),空间复杂度 (O(n^2))。

    • 1

    信息

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