解题思路
两个机器人的合法路径长度都是 h+w−2 步,所以可以按步数一起转移。
- 走了 t 步之后,机器人 A 只下过、右过,位置一定是 (t−c1,c1);机器人 B 只下过、左过,位置一定是 (t−(w−1−c2),c2)。
- 用 dp[c1][c2] 表示当前步数下,A 在第 c1 列、B 在第 c2 列时,已经盘点到的价值最大值。
- A 下一步只能下或右,B 下一步只能下或左。走到新格子时把两格价值都加上。
- 如果这一步两人落到同一格,该转移非法。不同时刻经过同一格是允许的,价值会加两次。
- 起点先把 v0,0+v0,w−1 记入。最终步数是 h+w−2,A 在第 w−1 列、B 在第 0 列。
题目内容
仓库管理员要给两个机器人规划路线,使它们盘点到的货物价值之和尽量大。
智能物流中心有一个 h 行 w 列的储物矩阵。格子 (i,j) 是一个货架,货物价值为 vi,j。机器人 A 从左上角 (0,0) 走到右下角 (h−1,w−1),每步只能向下或向右;机器人 B 从右上角 (0,w−1) 走到左下角 (h−1,0),每步只能向下或向左。
两个机器人同时出发、同步迈步:每一步双方必须各走一格,步数始终相同。机器人停在某个货架上就会把该货架的价值累加进自己的盘点结果。货仓很窄,任意时刻两个机器人不能站在同一个货架上。路径可以在不同时刻经过同一格子。
约束条件
3 ≤ h,w ≤ 100
0 ≤ vi,j ≤ 100000
输入描述
第一行两个整数 h、w,表示行数和列数。
接下来 h 行,每行 w 个整数,给出每个货架的货物价值。
输出描述
输出一个整数,即两个机器人盘点价值之和的最大值。
样例1
输入
3 3
2 1 4
3 0 5
6 7 8
输出
50
说明
- 机器人 A:(0,0)→(0,1)→(0,2)→(1,2)→(2,2),价值 2+1+4+5+8=‘20‘。
- 机器人 B:(0,2)→(1,2)→(2,2)→(2,1)→(2,0),价值 4+5+8+7+6=‘30‘。
- 两人在不同时刻都经过了 (0,2)、(1,2)、(2,2),没有在同一时刻撞车,总和为
50。
样例2
输入
3 4
1 0 0 2
3 4 5 6
7 8 9 1
输出
66
说明
- 机器人 A:(0,0)→(1,0)→(2,0)→(2,1)→(2,2)→(2,3),价值
29。
- 机器人 B:(0,3)→(1,3)→(1,2)→(2,2)→(2,1)→(2,0),价值
37。
- 总和为
66。
样例3
输入
4 4
1 2 3 4
5 0 9 1
2 8 0 3
4 5 6 7
输出
67
说明
两人都要尽量经过价值高的货架,同时错开同一时刻的位置,最大总和为 67。