#P15511. [Nordic2024]Thin Ice

    ID: 14726 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 8 上传者: 标签>CF2500并查集二分树形DP最小生成树算法基础模拟

[Nordic2024]Thin Ice

题目描述

Uolevi 在一个结冰的湖面上。湖面可以看作一个 n×mn\times m 的网格,每个格子上有一枚金币。

每个格子都有一个承受能力,表示这个格子的冰最多能够承受多少枚金币的重量。

Uolevi 每一步可以向上、下、左、右移动一格,但不能走出湖面边界。如果他当前所在的格子上还有金币,他可以把这枚金币捡起来。

当 Uolevi 移动到某个格子时,这个格子上的金币数量必须不超过该格子的承受能力。这里的金币数量包括:

  • Uolevi 当前随身携带的金币;
  • 如果目标格子上的金币还没有被捡起,也要算上目标格子上的这一枚金币。

Uolevi 自身的重量可以忽略不计。

Uolevi 想从湖边的某个格子出发,并最终回到湖边的某个格子。他希望在这趟旅途中收集尽可能多的金币。

请问他最多可以收集多少枚金币?

输入格式

第一行包含两个整数 n,mn,m,分别表示湖面的高度和宽度。

接下来 nn 行,每行包含 mm 个整数。第 ii 行第 jj 个整数 dd 表示格子 (i,j)(i,j) 的承受能力。

输出格式

输出一个整数,表示 Uolevi 最多可以收集的金币数量。

样例

输入

3 4
1 1 1 1
1 3 6 1
3 4 5 1

输出

5

样例解释

Uolevi 可以从左上角出发,并按照如下方式行动:

向下 \rightarrow 捡金币 \rightarrow 向右 \rightarrow 捡金币 \rightarrow 向下 \rightarrow 向左 \rightarrow 捡金币 \rightarrow 向右 \rightarrow 捡金币 \rightarrow 向右 \rightarrow 捡金币。

他不能收集 66 枚金币,因为那样就无法再回到湖边格子。

数据范围

子任务 1(17 分)

  • 1nm161 \le nm \le 16
  • 1d161 \le d \le 16

子任务 2(12 分)

  • 1nm21051 \le nm \le 2\cdot 10^5
  • 1d51 \le d \le 5

子任务 3(11 分)

  • n=1n=1
  • 1m1001 \le m \le 100
  • 1d1001 \le d \le 100

子任务 4(19 分)

  • n=1n=1
  • 1m21051 \le m \le 2\cdot 10^5
  • 1d21051 \le d \le 2\cdot 10^5

子任务 5(14 分)

  • 1nm10001 \le nm \le 1000
  • 1d10001 \le d \le 1000

子任务 6(27 分)

  • 1nm21051 \le nm \le 2\cdot 10^5
  • 1d21051 \le d \le 2\cdot 10^5