我正在玩《超级马力欧银河 3》(感谢任天堂送我的拷贝)。大多数关卡是球形的小行星,但奖励关卡则有所不同。它们呈环面(torus)形状。你可以将其想象成一个矩形,其两对相对的边粘合在一起。为了向 8 位机时代的前辈们致敬,行星的表面是一个小的矩形网格。网格中的每个单元格都有其自身的高度。
游玩奖励关卡包含两个部分。在第一部分中,我可以对关卡进行地形改造,即执行零次或多次操作。在一次操作中,我选择网格中的一行或一列,并将该行或该列中所有单元格的高度增加 1。我可以对相同的或不同的行和列执行任意次数的操作。
地形改造完成后,在每两个高度相等的相邻单元格的公共边上会出现一枚硬币,我可以收集它们。我擅长平台跳跃,所以收集硬币不成问题。设计一种地形改造算法,使得出现的硬币数量尽可能多——这就是问题所在。实际上,这是留给你的问题。
输入格式
第一行包含两个整数 $n$ 和 $m$ ($2 \le n, m \le 50$),表示矩形网格的尺寸。
接下来的 $n$ 行描述了所有单元格的初始高度。其中第 $i$ 行包含 $m$ 个整数 $h_{i1}, h_{i2}, \dots, h_{im}$,其中 $h_{ij}$ 表示坐标为 $(i, j)$ 的单元格的高度。
所有高度均在 $0$ 到 $500$ 之间(含 $0$ 和 $500$)。地形改造后高度不要求保持在此范围内。
输出格式
输出一个整数,表示如果我以最优方式改造关卡,最多能出现的硬币数量。
样例
输入格式 1
2 3 1 2 3 4 5 99
输出格式 1
8
输入格式 2
3 3 3 2 4 2 2 3 5 4 6
输出格式 2
14
输入格式 3
5 4 3 6 10 8 0 6 8 8 2 4 5 6 1 5 9 6 3 6 11 12
输出格式 3
16
说明
第一个样例在最优地形改造后的关卡:
第一个样例在最优地形改造后的关卡: