1 条题解

  • 0
    @ 2025-12-9 20:35:38

    「BJOI2017」机动训练 题解

    问题转化 设地形序列 ss 在所有机动路径中出现 cnt(s)cnt(s) 次,则:

    每条地形序列为 ss 的路径权重为 cnt(s)cnt(s)

    所有权重和 = scnt(s)2\sum_s cnt(s)^2

    这等价于统计地形序列相同的机动路径对的数量。

    机动路径性质 “不远离终点” ⇒ 路径在 xxyy 方向单调。 设终点相对于起点的方向为 (dx,dy)(dx,dy),其中 dx,dy1,0,1dx,dy\in{-1,0,1}(dx,dy)(0,0)(dx,dy)\neq(0,0),则:

    每步移动 (p,q)(p,q) 满足 p0,dx,q0,dy,(p,q)(0,0)p\in{0,dx}, q\in{0,dy}, (p,q)\neq(0,0)

    因此路径单调且不自交

    方向分类 共有 8 种 (dx,dy)(dx,dy) 组合,对应 8 个单调方向。 利用对称性,可归为 4 类:

    水平/垂直(dxdy=0dx·dy=0):4 个方向

    对角线(dxdy0dx·dy\neq0):4 个方向

    核心算法:双路径 DP 对每对方向 (D1,D2)(D_1,D_2)(含同类和相反类),计算匹配路径对数。

    定义 f[x1][y1][x2][y2]f[x_1][y_1][x_2][y_2]:第一条路径在 (x1,y1)(x_1,y_1)(沿 D1D_1),第二条在 (x2,y2)(x_2,y_2)(沿 D2D_2),且从起点到当前位置地形序列相同的方案数。

    转移:对每个允许的移动 (p1,q1)(p_1,q_1)(对 D1D_1)和 (p2,q2)(p_2,q_2)(对 D2D_2):

    text 若 grid[x1+p1][y1+q1] = grid[x2+p2][y2+q2] 则 f[nx1][ny1][nx2][ny2] += f[x1][y1][x2][y2] 初始:f[sx1][sy1][sx2][sy2]=1f[sx_1][sy_1][sx_2][sy_2]=1,若两起点字符相同。

    答案累计:当路径长度 ≥ 2(即已走步数 ≥ 1)时,累加到总答案。

    时间复杂度 O((mn)2×9×C)O((mn)^2 × 9 × C),其中 C16C≈16(方向对常数),m,n30m,n≤30 时可过。

    最终答案 对所有方向对的结果乘对称系数求和,模 109+910^9+9

    • 1

    信息

    ID
    5964
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    1
    已通过
    1
    上传者