1 条题解

  • 0
    @ 2026-8-22 5:46:59

    题解

    思路

    dpidp_i 表示从格子 00 出发并恰好停在 ii 时能获得的最大总和。令 dp0=0dp_0=0,不可达状态为负无穷。转移为

    dpi=Ai+maxmax(0,iR)jiLdpj.dp_i=A_i+\max_{\max(0,i-R)\le j\le i-L}dp_j.

    做法

    计算 ii 前,将新进入窗口的下标 iLi-L 加入双端队列,并弹出所有 dpdp 值不大于它的队尾;再删除所有下标小于 iRi-R 的过期队首。队列中的下标递增、dpdp 值单调不增,因此队首就是合法前驱的最大值。

    被弹出的队尾更早且不优,未来不可能胜过新状态;过期元素恰在离开窗口时删除,所以转移不重不漏。

    从最后停留格子 ii 能一步离岸,当且仅当 i+R>Ni+R>N。因此答案是所有 i[NR+1,N]i\in[N-R+1,N] 的可达 dpidp_i 最大值,而不一定是 dpNdp_N

    复杂度

    每个下标至多入队和出队一次,时间复杂度为 O(N)O(N),空间复杂度为 O(N)O(N)

    • 1

    信息

    ID
    961
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    递交数
    1
    已通过
    0
    上传者