哲秀和英姬在玩游戏时穿过了一个地牢。地牢是一个 $N \times N$ 的网格状结构。网格的行从上到下编号为 $0$ 到 $N-1$,列从左到右编号为 $0$ 到 $N-1$。位于第 $i$ 行、第 $j$ 列的格子称为格子 $(i, j)$。
穿过地牢的规则如下:
- 哲秀从地牢左上角的格子出发,移动到右下角的格子。移动时,哲秀只能从当前格子移动到右侧或下方相邻的格子。
- 英姬从地牢右上角的格子出发,移动到左下角的格子。移动时,英姬只能从当前格子移动到左侧或下方相邻的格子。
地牢的每个格子中都有一个物品。每个物品的价值为正整数、0 或负整数,格子 $(i, j)$ 中物品的价值为 $V[i][j]$。哲秀和英姬已经知道了所有格子中物品的价值。穿过地牢后,哲秀和英姬会收集他们经过的所有格子中的物品。请注意,即使两人都经过了同一个格子,该格子中的物品也只会被收集一次。
请编写一个程序,计算哲秀和英姬所收集物品价值之和的最大可能值。
实现细节
你需要实现以下函数:
int max_item_sum(vector<vector<int> > V)
- $V$:一个大小为 $N \times N$ 的二维整数数组。对于所有 $i, j$ ($0 \le i, j \le N-1$),$V[i][j]$ 是地牢格子 $(i, j)$ 中物品的价值。
- 该函数应返回哲秀和英姬可以收集的物品价值之和的最大可能值。
提交的源代码中不得执行任何输入输出函数。
数据范围
- $2 \le N \le 1000$
- 对于所有 $i, j$,$-100\,000 \le V[i][j] \le 100\,000$ ($0 \le i, j \le N-1$)
子任务
- (11分) $N \le 5$
- (44分) $N \le 300$
- (15分) 对于所有 $i, j$,$V[i][j] \ge 0$ ($0 \le i, j \le N-1$)
- (30分) 无额外限制。
样例
样例 1
输入: $N = 5, V = [[-1, -1, -1, -1, -1], [-1, -1, 1, -1, -1], [-1, -1, -1, -1, -1], [-1, -1, 1, -1, -1], [-1, -1, -1, -1, -1]]$
调用:
max_item_sum([[-1, -1, -1, -1, -1], [-1, -1, 1, -1, -1], [-1, -1, -1, -1, -1], [-1, -1, 1, -1, -1], [-1, -1, -1, -1, -1]])
输出: -9
样例 2
输入: $N = 5, V = [[1, 2, 3, 4, 5], [2, 3, 4, 5, 1], [3, 4, 5, 1, 2], [4, 5, 1, 2, 3], [5, 1, 2, 3, 4]]$
调用:
max_item_sum([[1, 2, 3, 4, 5], [2, 3, 4, 5, 1], [3, 4, 5, 1, 2], [4, 5, 1, 2, 3], [5, 1, 2, 3, 4]])
输出: 60
样例 3
输入: $N = 5, V = [[1, 1, -1, -1, 1], [-1, 1, -1, 1, 1], [1, 1, 1, 1, -1], [1, -1, -1, 1, -1], [1, -1, -1, 1, 1]]$
调用:
max_item_sum([[1, 1, -1, -1, 1], [-1, 1, -1, 1, 1], [1, 1, 1, 1, -1], [1, -1, -1, 1, -1], [1, -1, -1, 1, 1]])
输出: 15
Sample grader
Sample grader 接收以下格式的输入:
- 第 1 行:$N$
- 第 $2 + i$ 行 ($0 \le i \le N-1$):$V[i][0] \ V[i][1] \ \dots \ V[i][N-1]$
Sample grader 输出:
- 第 1 行:函数
max_item_sum返回的值
请注意,Sample grader 可能与实际评测时使用的 grader 不同。
Figure 1. 样例 1 的地牢网格