AT_cpsco2019_s2_f.Treasure Collector

通过率:0%

AC君温馨提醒

该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

在一个 N×NN \times N 的网格上,每个格子里都放着一枚硬币。我们用 (i,j)(i, j) 表示第 ii 行、第 jj 列的格子位置。例如,左上角的格子是 (1,1)(1, 1),右上角是 (1,N)(1, N),左下角是 (N,1)(N, 1),右下角则是 (N,N)(N, N)。

你是一名擅长驾驭机器人来收集宝藏的寻宝者,决定用这些机器人来收集网格上的硬币。

网格上有 NN 个机器人,编号为 11 到 NN。你将会得到一个长度为 NN 的排列 PP,和一个长度为 NN 的正整数序列 AA。每个机器人 ii 的初始位置是格子 (i,Pi)(i, P_i)。机器人可以一次最多携带 AiA_i 枚硬币。

由于一次性收集大量硬币比较困难,因此你打算将所有硬币移动到机器人的初始位置中之一。目标是,让所有的硬币都聚集到某个机器人的初始位置。

每次行动需要支付 11 的代价,并且你可以执行以下操作:

  • 选择一个机器人,假设是 ii。
  • 指定一个方向(上下左右之一),以及一个不超过 AiA_i 的正整数 xx,并告知机器人。
  • 机器人会按这个方向移动到相邻格子,并且如果在途中遇到硬币,就拾取硬币;这个过程将持续,直到机器人拾取了 xx 枚硬币。
  • 拾取完硬币后,机器人将沿原路返回它的初始位置 (i,Pi)(i, P_i),并且将所有拾取的硬币放在那里。

这些机器人已经比较老旧,容易误操作,因此不能让机器人进入其他机器人已经经过的格子,或者试图移出网格范围。

请计算,最小需要多少代价,才能将所有硬币都汇集到某个初始位置。

输入格式

输入以以下形式给出:

NN P1 P2 … PNP_1\ P_2\ \ldots\ P_N A1 A2 … ANA_1\ A_2\ \ldots\ A_N

输出格式

输出将所有硬币聚集到某个初始位置所需的最小代价。

输入输出样例

  • 输入#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

说明/提示

  • 2≤N≤802 \le N \le 80
  • 1≤Pi≤N1 \le P_i \le N
  • PP 是 11 到 NN 的一个排列
  • 1≤Ai≤N−11 \le A_i \le N-1
  • 所有输入均为整数

样例解释 1

可以通过以下 44 次操作达成目标:

  • 机器人 11 向下移动,x=1x=1
  • 机器人 33 向左移动,x=2x=2
  • 机器人 22 向上移动,x=1x=1
  • 机器人 33 向上移动,x=2x=2

样例解释 2

可以通过以下 44 次操作达成目标:

  • 机器人 11 向下移动,x=2x=2
  • 机器人 33 向上移动,x=2x=2
  • 机器人 22 向上移动,x=1x=1
  • 机器人 22 向下移动,x=1x=1

本翻译由 AI 自动生成

输入解题思路,AI测评打分。不知道怎么写?

首页