1 条题解

  • 0
    @ 2026-5-6 18:31:44

    本题解是官方题解的 AI 中文翻译。

    子任务 1. 如果所有 wi=1w_i = 1,那么答案就是最短路长度减去 pp,可以用 Dijkstra 算法在 O(mlogn)O(m \log n) 内找到。

    子任务 4. 如果所有 si100s_i \leq 100,可以设计状态 dp[v][ans]=最大剩余金钱dp[v][ans] = \text{最大剩余金钱},转移方式类似 Dijkstra 算法。注意到答案不会超过 SnS \cdot n,其中 S=maxsiS = \max s_i。因此总复杂度为 O(Sn(n+m)logn)O(S \cdot n \cdot (n + m) \cdot \log n)

    子任务 2. 注意表演可以“延后”进行。当我们钱不够过某条边时,可以在已经经过的顶点中提前多次表演,以获取最多的钱。如果图是一个两端分别为 11nn 的链(bamboo),只需在前缀中维护 wiw_i 最大的顶点,每当钱不够时就在该顶点表演。这样复杂度为 O(n)O(n)

    完整解法. 借鉴子任务 2 的思路,可以设计状态 dp[v][best]=(最少表演次数,最大剩余金钱)dp[v][best] = (\textit{最少表演次数}, \textit{最大剩余金钱}),其中 vv 表示当前所在顶点,bestbest 表示已经经过的、wiw_i 最大的顶点。可以证明,最优策略是先最小化表演次数,再最大化剩余金钱。该动态规划的转移方式与子任务 4 类似,总复杂度为 O(mnlogn)\mathcal{O}(mn \log n)

    • 1

    信息

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