#cpsco2019s2f. [cpsco2019_s2_f]Treasure Collector
[cpsco2019_s2_f]Treasure Collector
问题文
有一个 的网格,每个格子上都放着一枚硬币。我们将网格的第 行第 列的格子记作 。例如,左上角的格子是 ,右上角的格子是 ,左下角的格子是 ,右下角的格子是 。
您是一名擅长机器人探险的宝藏猎人,打算使用机器人来收集这个网格上的硬币。
一共有 台机器人,编号从 到 。给定一个 到 的排列 和长度为 的正整数序列 。机器人 最初位于位置 ,同时最多可以携带 枚硬币。
由于一次性收集大量硬币很困难,您决定将硬币集中到机器人的初始位置上。您的目标是将每个硬币都放置在机器人的初始位置之一。
每支付 的代价,您可以进行以下操作:
- 选择一个机器人。设选中的机器人为 。
- 选择上下左右其中一个方向,并选择不超过 的正整数 ,并将它们传达给机器人 。
- 机器人 沿着传达的方向移动到相邻格子上,并重复这个过程,直到移动到的格子上没有硬币为止。
- 当机器人 收集了 枚硬币后,它会原路返回到初始位置 ,并将手中所有的硬币放置在那里。
由于这些机器人很古老且容易发生故障,您不能让机器人进入其他机器人已经进入过的格子,也不能让机器人走出网格之外。
请计算将每个硬币都放置在机器人的初始位置之一所需的最小代价。
约束条件
- 是 到 的排列。
- 输入均为整数。
输入
从标准输入读取以下格式的输入。
输出
输出将每个硬币都放置在机器人的初始位置之一所需的最小代价,输出为一行。
示例 1
3
1 2 3
1 1 2
输出示例 1
4
以下操作可以实现目标:
- 选择机器人 ,向下,
- 选择机器人 ,向左,
- 选择机器人 ,向上,
- 选择机器人 ,向上,
示例 2
3
2 3 1
2 1 2
输出示例 2
4
以下操作可以实现目标:
- 选择机器人 ,向下,
- 选择机器人 ,向上,
- 选择机器人 ,向上,
- 选择机器人 ,向下,
示例 3
10
7 10 6 1 8 2 9 5 4 3
2 3 3 9 1 9 5 8 1 7
输出示例 3
35