1 条题解

  • 0
    @ 2026-8-20 3:35:56

    解题思路

    思路

    设当前场上的宝可梦为 uu,下一只要雇佣的宝可梦为 vv。若选择第 jj 个属性对战,只需先将 av,ja_{v,j} 增加到至少 au,ja_{u,j},这部分的最小费用是

    max(0,au,jav,j).\max(0,a_{u,j}-a_{v,j}).

    因此从 uu 换到 vv 的最小费用为

    cv+min1jmmax(0,au,jav,j).c_v+\min_{1\le j\le m}\max(0,a_{u,j}-a_{v,j}).

    把每只宝可梦看成一个顶点,该式就是一条从 uuvv 的有向边权。答案是从第 11 个顶点到第 nn 个顶点的最短路。所有边权非负,可用 Dijkstra 算法。

    做法

    子任务 1

    n80n\le 80 时,可以直接枚举最短路中的当前点 uu、下一个点 vv 以及对战属性 jj,不显式存储完全图。时间复杂度为 O(n2m)O(n^2m),空间复杂度为 O(nm)O(nm)

    满分做法

    对每个属性 jj,将所有宝可梦按 ai,ja_{i,j} 从小到大排序,并为排序后的每个位置建立一个辅助顶点。

    在同一个属性的排序链上:

    • 从属性值较小的相邻位置走向较大的位置,边权为 00
    • 从较大的相邻位置走向较小的位置,边权为两个属性值之差。

    每个原顶点 uu 向它在每条属性链中的位置连一条边权为 00 的边;每个位置顶点向该位置所属的宝可梦 vv 连一条边权为 cvc_v 的边。

    uu 在第 jj 条链上的位置走到 vv 的位置:若 av,jau,ja_{v,j}\ge a_{u,j},只需沿零边权方向移动;否则逆向边权望远镜式相加,总和恰为 au,jav,ja_{u,j}-a_{v,j}。再加上离开辅助顶点时的 cvc_v,正好得到选用第 jj 个属性的转移费用。在所有属性链中取最短路,便自动取到最优属性。

    图中有 O(nm)O(nm) 个辅助顶点和 O(nm)O(nm) 条可隐式枚举的边。排序与 Dijkstra 的总时间复杂度为 O(nmlog(nm))O(nm\log(nm)),空间复杂度为 O(nm)O(nm)

    正确性说明

    对任意两只宝可梦 u,vu,v 和属性 jj,对应排序链上从 uu 的位置到 vv 的最短距离恰为 max(0,au,jav,j)\max(0,a_{u,j}-a_{v,j})。离开该位置时再支付 cvc_v,因而辅助图完整且精确地表示原问题中的每一次最优雇佣与对战。反之,辅助图的每段路径也都可对应到先增加挑战者的某一属性、再雇佣对战的合法操作。所以从顶点 11 到顶点 nn 的最短路与原问题的最小费用完全相同。

    复杂度

    子任务 1 的时间复杂度为 O(n2m)O(n^2m),空间复杂度为 O(nm)O(nm)。满分做法的时间复杂度为 O(nmlog(nm))O(nm\log(nm)),空间复杂度为 O(nm)O(nm)

    • 1

    信息

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