#5758. 寻宝冒险

寻宝冒险

题目描述

在一个神秘岛屿上, 据说隐藏着一座传说中的宝藏。这座宝藏被认为是无比珍贵的,引来了众多冒险家的追逐。

主人公是一位名叫亚历克斯的年轻冒险家。他听说了这个宝藏的传闻,决定踏上寻宝之旅。但是,为了到达宝藏所在的地点,他必须穿越一片险恶的迷宫。

迷宫由一个 m×nm×n 矩阵 gridgrid 表示,矩阵的每个单元格都有一个唯一的整数值,代表着该位置的特定路径。亚历克斯​只能从每一行的单元格移动到下一行的某个单元格​,每次移动都需要支付一定的代价。

老智者告诉他,要找到最小的路径代价,他需要将路径上​经过的单元格的值之和,与移动的代价之和相加​​。

移动的代价用一个下标从 00 开始的二维数组 costcost 表示,该数组大小为 (m×n)×n(m×n)×n,其中 cost[i][j]cost[i][j] 代表值为 i 的单元格移动到下一行j (j = 0,1,2...n-1)单元格的代价。从 gridgrid 最后一行的单元格移动的代价可以忽略。

gridgrid 一条路径的代价是:所有路径经过的单元格的​值之和​,加上所有移动的代价之和

求从第一行任意单元格出发,到达最后一行任意单元格的最小路径代价。

现在,你有机会像亚历克斯一样,踏上寻宝冒险。通过计算路径的代价,找到通往宝藏的最小路径代价吧!

输入

第一行是 gridgrid 的行数 mm、列数 nn

接下来输入 m×nm ×n不相同的数值(0m×n1) (​0 ∼m×n−1)

接下来输入 (m×n)×n(m×n)×n个数值表示移动代价,cost[i][j] cost[i][j]代表从值为 ii 的单元格移动到下一行第 jj 列(j = 0,1,2...n-1)单元格的代价。

输出

最小路径代价。

样例

输入复制

3 2
5 3
4 0
2 1
9 8
1 5
10 12
18 6
2 4
14 3

输出复制

17

输入复制

2 3
5 1 2
4 0 3
12 10 15
20 23 8
21 7 1
8 1 13
9 10 25
5 3 2

输出复制

6

输入复制

2 2
0 1
2 3
100 100
1 2
1 1
1 1

输出复制

4

说明

【样例 11 说明】

样例 11 对应的矩阵如下图所示:

行数为 33,列数为 22

gridgrid 矩阵为:

5 3
4 0
2 1

costcost 数组为:

9 8
1 5
10 12
18 6
2 4
14 3

cost[0][0]=9cost[0][1]=8cost[0][0]=9、cost[0][1]=8,分别代表:数值 00 移动到下一行j=0 j=0 的列代价为 99、移动到下一行 j=1j=1 的列代价为 88

最小代价的路径是 5>0>15 -> 0 -> 1

路径途经单元格值之和 5+0+1=65 + 0 + 1 = 6

55 移动到 00 的代价为 33

00 移动到 11 的代价为 88

路径总代价为6+3+8=176 + 3 + 8 = 17

【样例 22 说明】

最小代价的路径是 2 -> 3 。

路径途经单元格值之和 2 + 3 = 5 。

从 2 移动到 3 的代价为 1 。

路径总代价为 5 + 1 = 6 。

【样例 33 说明】

最小代价的路径是 1 -> 2 。

途经最小总代价为 1 + 1 + 2 = 4 。

【数据范围】

对于 100% 的数据满足: 2m,n502≤m,n≤50

0grid[i][j]m×n10≤grid[i][j]≤m×n−1,数值互不相同。

1cost[i][j]1001≤cost[i][j]≤100