#P2009. 二维迷宫最大得分2

二维迷宫最大得分2

题目描述

有一个 nn 行 mm 列的二维网格。我们用 (r,c)(r, c) 表示这个二维迷宫中从上到下第 rr 行,从左到右第 cc 列的格子。

每个格子上都有一个数字,其中格子 (i,j)(i, j) 上的数字是 ai,ja_{i,j}。

Lucas 一开始在网格的左上角 (1,1)(1, 1) 处,他要到达网格的右下角 (n,m)(n, m) 处。

每次移动,Lucas 都只能从当前所在的格子 向右 或 向下 移动到与它相邻的那个格子中。

但是 Lucas 不能连续三次往同一个方向进行移动! 也就是说:“右右右” 或者 “下下下” 是不被允许的。

Lucas 最终会有一个得分,这个得分定义为 Lucas 在移动过程中到达过的所有格子上的数字之和(包括 a1,1a_{1, 1} 和 an,ma_{n,m})。

请你帮助 Lucas 设计一个移动路线,使得他的得分最大。并输出这个最大得分。

输入格式

第一行,两个整数 nn 和 mm,以一个空格分隔。

接下来 nn 行,每行包含 mm 个整数,表示每个格子上的数字。其中,第 ii 行的第 jj 个数字表示 ai,ja_{i, j}。

输出格式

输出一个整数,表示 Lucas 的最大得分。

如果无法达到终点,输出一行 "so sad!"。

样例

4 1
2
3
3
3
so sad!
3 4
2 9 9 9
6 4 1 2
9 5 2 1
24

说明/提示

数据规模与约定

  • 对于 20%20\% 的数据,n,m≤10n, m \le 10,ai,j≤10a_{i,j} \le 10
  • 对于 40%40\% 的数据,n,m≤50n, m \le 50,ai,j≤1000a_{i,j}\le 1000
  • 对于 100%100\% 的数据,1≤n,m≤5001 \le n, m \le 500,0≤ai,j≤1090 \le a_{i,j} \le 10^9