1 条题解

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

    列车与统计 题解

    思路

    令 dpi=∑j=i+1nρi,jdp_i=\sum_{j=i+1}^n\rho_{i,j}。若 ai=na_i=n,显然 dpi=n−idp_i=n-i。

    否则在区间 [i+1,ai][i+1,a_i] 中选取 apa_p 最大的位置 pp。由于该区间包含位置 aia_i,有 ap>aia_p>a_i。对所有 j>aij>a_i,最优路线可以先花一元到达 pp,再从 pp 前往 jj;而 p+1,…,aip+1,\ldots,a_i 从 pp 均只需一元。因此

    dpi=(n−i)+dpp−(ai−p).dp_i=(n-i)+dp_p-(a_i-p).

    做法

    子任务 1 可以建立所有可达边并运行 Floyd-Warshall,复杂度 O(n3)O(n^3)。

    子任务 2 按 ii 从大到小计算 dpidp_i,每次在线性扫描区间 [i+1,ai][i+1,a_i] 找到 apa_p 最大的位置,复杂度 O(n2)O(n^2)。

    满分算法用线段树或稀疏表回答区间最大值位置,把每次查找降为 O(log⁡n)O(\log n) 或 O(1)O(1),再使用上述递推。

    正确性证明

    从 ii 到 i+1,…,aii+1,\ldots,a_i 的距离均为一。对更右侧的终点,选择当前一步后可达最远的站 pp 不劣于其他第一步;其后续最短路已由 dppdp_p 统计。dppdp_p 中到 p+1,…,aip+1,\ldots,a_i 的距离都为一,递推式减去这 ai−pa_i-p 项,剩余正好对应终点 ai+1,…,na_i+1,\ldots,n。因此递推准确计算 dpidp_i,累加所有 dpidp_i 即为答案。

    复杂度

    满分算法时间复杂度 O(nlog⁡n)O(n\log n),空间复杂度 O(n)O(n)。

    • 1

    信息

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