题目描述
Uolevi 在一个结冰的湖面上。湖面可以看作一个 n×m 的网格,每个格子上有一枚金币。
每个格子都有一个承受能力,表示这个格子的冰最多能够承受多少枚金币的重量。
Uolevi 每一步可以向上、下、左、右移动一格,但不能走出湖面边界。如果他当前所在的格子上还有金币,他可以把这枚金币捡起来。
当 Uolevi 移动到某个格子时,这个格子上的金币数量必须不超过该格子的承受能力。这里的金币数量包括:
- Uolevi 当前随身携带的金币;
- 如果目标格子上的金币还没有被捡起,也要算上目标格子上的这一枚金币。
Uolevi 自身的重量可以忽略不计。
Uolevi 想从湖边的某个格子出发,并最终回到湖边的某个格子。他希望在这趟旅途中收集尽可能多的金币。
请问他最多可以收集多少枚金币?
输入格式
第一行包含两个整数 n,m,分别表示湖面的高度和宽度。
接下来 n 行,每行包含 m 个整数。第 i 行第 j 个整数 d 表示格子 (i,j) 的承受能力。
输出格式
输出一个整数,表示 Uolevi 最多可以收集的金币数量。
样例
输入
3 4
1 1 1 1
1 3 6 1
3 4 5 1
输出
5
样例解释
Uolevi 可以从左上角出发,并按照如下方式行动:
向下 → 捡金币 → 向右 → 捡金币 → 向下 → 向左 → 捡金币 → 向右 → 捡金币 → 向右 → 捡金币。
他不能收集 6 枚金币,因为那样就无法再回到湖边格子。
数据范围
子任务 1(17 分)
- 1≤nm≤16
- 1≤d≤16
子任务 2(12 分)
- 1≤nm≤2⋅105
- 1≤d≤5
子任务 3(11 分)
- n=1
- 1≤m≤100
- 1≤d≤100
子任务 4(19 分)
- n=1
- 1≤m≤2⋅105
- 1≤d≤2⋅105
子任务 5(14 分)
- 1≤nm≤1000
- 1≤d≤1000
子任务 6(27 分)
- 1≤nm≤2⋅105
- 1≤d≤2⋅105