D. 挖啊挖(dig)

内存限制:256 MiB 时间限制:1000 ms 输入文件: dig.in 输出文件: dig.out
题目类型:传统 评测方式:文本比较

题目描述

一块菜园子有 𝑟 行 𝑐 列构成 (左上角为第 1 行第 1 列,右下角为第 𝑟 行第 𝑐 列),共 𝑟 × 𝑐 个区域。在每个区域的地下都埋藏着不同数量的金子。

小 A 同学从左上角第 1 行 1 列 (1,1) 开始走向右下角第 𝑟 行第 𝑐 列 (𝑟, 𝑐)。走路规则是只能从当前走向右上方、右边以及右下方, 即坐标位置(𝑥, 𝑦)走向坐标位置(𝑥, 𝑦 + 1), (𝑥 + 1, 𝑦 + 1), (𝑥 − 1, 𝑦 + 1) 三个中的其中一个。每走到一个区域, 小 A 可以挖走该区域中的金子。

请编程帮助小 A 安排行走路线, 使挖到金子的数量最多。

输入格式

从文件 dig.in 中读入数据。

输入的第一行包含两个正整数 𝑟, 𝑐,表示菜园子的行数和列数。

接下来 𝑟 行,每行 𝑐 个整数,依次表示相应区域中的金子数量 𝑘。

数据保证 1 ≤ 𝑟, 𝑐 ≤ 100, 1 ≤ 𝑘 ≤ 25

输出格式

输出到文件 dig.out 中。

输出一行一个整数, 表示小 A 挖到最多的金子数量

样例

【 样例输入】

3 8
6 3 3 7 9 2 7 11
2 1 2 5 7 9 6 12
4 9 4 23 2 5 8 10

【样例输出】

68

【样例解释】
小 A 的行走路线为:
(1,1) → (2,2) → (3,3) → (3,4) → (2,5) → (2,6) → (3,7) → (3,8)
小 A 挖到的金子数量为: 6 + 1 + 4 + 23 + 7 + 9 + 8 + 10 = 68

数据范围与提示

对于所有测试数据,满足 1 ≤ 𝑟, 𝑐 ≤ 100, 1 ≤ 𝑘 ≤ 25。

测试点 1,2,3,4,5: 𝑟, 𝑐 ≤ 15

测试点 6,7,8,9,10: 𝑟, 𝑐 ≤ 100