Loading

CF1066F 题解

CF1066F

题意

在一个平面上有 \(n\) 个点,第 \(i\) 个点的坐标为 \((x_i, y_i)\),它的级别为 \(\max(x_i, y_i)\)

最开始在 \((0, 0)\)。当级别为 \(i\) 的点全部走完后才可以走级别为 \(i + 1\) 的点。

两个点 \((x_1, y_1)\)\((x_2, y_2)\) 之间的距离是 \(|x_1 - x_2| + |y_1 - y_2|\)

请你求出走完所有的点的最短总距离。

思路

我们先思考一个问题,级别为 \(i\) 的点在平面直角坐标系上会是那些?

那么,可以发现,对于同一级别的点来说,要想用最短距离走完这些点的话,一定是从最左上的点走到最右下的点。

\(p_{i, 0 / 1}\) 表示级别为 \(i\) 的点最左上 / 最右下的点的编号,\(D(i, j)\) 表示编号为 \(i\)\(j\) 的点之间的距离。

\(dp_{i, 0 / 1}\) 表示级别为 \(i\) 的点的这段路径最终停在最左上 / 最右下的点上的最短距离。

所以有转移为:

\[dp_{i, 0} = \min(dp_{i - 1, 0} + D(p_{i - 1, 0}, p_{i, 1}), dp_{i - 1, 1} + D(p_{i - 1, 1}, p_{i, 1})) + D(p_{i, 0}, p_{i, 1}) \]

\[dp_{i, 1} = \min(dp_{i - 1, 0} + D(p_{i - 1, 0}, p_{i, 0}), dp_{i - 1, 1} + D(p_{i - 1, 1}, p_{i, 0})) + D(p_{i, 0}, p_{i, 1}) \]

posted @ 2023-03-12 23:58  chengning0909  阅读(8)  评论(0编辑  收藏  举报