Processing math: 100%
编程题

问题描述

小怂喜欢收集水洼中的水,他每到一个水量不为零的小水洼中就会收集里面的所有水。

小怂去到了一个大小为 N×M 的水洼上,水洼上的每一块小水洼水量为 ai,j(i[1,n],j[1,m])。假设小怂的起始点是 (1,1),他可以移动无数次,每次移动只能移动到当前水洼上下左右四个方向的相邻小水洼上,并且需要满足相邻小水洼水量大于 0,即如果新的小水洼水量为零,小怂就不能走到这个小水洼上。特别地,小怂可以重复走到某块小水洼,但是小水洼中的水只能被收集一次;如果起始点的水洼中有水,他会收集那些水。

值得注意的是:每块上下左右相连且水量不为 0 的小水洼会合成一块大水洼,小怂每到一块新的大水洼,他之前收集到的水量会变为 0

求解小怂在大水洼中可以收集到的最大水量。

输入格式

第一行是两个整数 N,M,分别表示行数、列数。

接下来 N 行,每行包含 M 个整数,每个整数表示当前位置的小水洼的水量。

数据范围保证:1N,M1001ai,j106(0)

输出格式

输出共 1 行,一个整数,表示小怂在水洼中可以收集到的最大水量。

样例输入

3 3
1 2 03 4 0
0 0 5

样例输出

10

样例解释

由题意得,样例中有两个大水洼。

第一个大水洼由 (1,1)(1,2)(2,1)(2,2) 四个小水洼组成,水量总和为 10

第二个大水洼由 (3,3) 一个小水洼组成,水量总和为 5

因此小怂在大水洼中可以获得的最大水量是 10

查看答案
赣ICP备20007335号-2