洛谷P7074方格取数(CSPJ2020)
3306+
作者:crxis 发布:2020-11-09 分类:动态规划
题目大意:二维棋盘,每个位置有分值,从左上角走到右下角,只能往右、往上、往下三个方向走,最大分值是多少?
题目描述
设有 的方格图,每个方格中都有一个整数。现有一只小熊,想从图的左上角走到右下角,每一步只能向上、向下或向右走一格,并且不能重复经过已经走过的方格,也不能走出边界。小熊会取走所有经过的方格中的整数,求它能取到的整数之和的最大值。
输入格式
第一行有两个整数 。
接下来 行每行 个整数,依次代表每个方格中的整数。
输出格式
一个整数,表示小熊能取到的整数之和的最大值。
输入输出样例
输入 #1
3 4 1 -1 3 2 2 -1 4 -1 -2 2 -3 -1
输出 #1
9
输入 #2
2 5 -1 -1 -3 -2 -7 -2 -1 -4 -1 -2
输出 #2
-10
数据规模与约定
- 对于 的数据,。
- 对于 的数据,。
- 对于 的数据,。
- 对于 的数据,。方格中整数的绝对值不超过 。
解题思路
爆搜路径,记忆化即可。走到某一个位置,如果是从左边过来的,会有3个方向可以走;如果是从上面或者下面过来的,那么只有2个方向可以走;记忆化的时候,需要记录这些情况,所以不仅需要记录位置,还需要记录上一个位置,位置不好记,可以记录方向!极端情况,可以走遍整个棋盘,需要开long long!
程序实现
记忆化搜索
动态规划:为了避免上下乱走,先处理从左上方过来,再处理从左下方过来,并分开两个数组记录最优值,最后再合并在一起。