#P15632. [2020年保加利亚国家队组队赛Senior]EndToEnd连接两端

[2020年保加利亚国家队组队赛Senior]EndToEnd连接两端

题目描述

Eli 有一个 NM 列的数字矩阵。每个格子里恰好有一个 09 之间的数字(含端点)。

她可以修改这个矩阵:把某个格子中的数字改成另一个数字。她可以修改若干个、全部,甚至一个也不改。把数字 X 改成数字 Y 需要花费 |X-Y| 秒,也就是两者的绝对差。

如果在矩阵中,存在一条由相邻(有公共边)格子组成、且所有格子数字都相同的路径,把上边界与下边界连起来,或者把左边界与右边界连起来,那么 Eli 就说她把矩阵的“两端连接起来”了。她希望同时做到这两件事:既连接上边界和下边界,也连接左边界和右边界。注意:为了做到这一点,两条路径必须使用同一个数字,因为两条路径一定会相交。

下面看一个例子:

示例矩阵说明

初始矩阵:

2753852
9567342
5294979
3180559

一种做法,花费 16 秒:

2753852
8888842
5284888
3180559

另一种做法,花费 14 秒,使用数字 3

2753852
9333333
5394979
3380559

第三种做法,花费 14 秒,使用数字 7

2753852
7777342
5297777
3180579

给定 Eli 的初始矩阵,你能求出她把矩阵两端按要求连通所需的最少时间吗?

输入格式

第一行输入两个整数 NM
接下来 N 行,每行输入一个长度为 M 的数字串。

输出格式

输出一个整数,表示按要求修改矩阵所需的最少秒数。

约束

  • 1 ≤ N, M ≤ 500
  • 子任务 1:占 40% 分值,N, M ≤ 200
  • 子任务 2:占 40% 分值,至少存在一个最优解,使得两条路径恰好只在一个格子相交
  • 子任务 1 与子任务 2 合计占 60% 分值
  • 测试按每 5 个测试点分组;一组的分数只有在该组内所有测试全部通过时才能获得

样例

输入

4 7
2753852
9567342
5294979
3180559

输出

14