【传纸条问题】求矩阵路径最大值(两条路径不能重复)
个人思路
题意
可将问题简化为从矩阵的左上角走到右下角并返回左上角,且要求两条路径不能重复,求来回路径的权值最大
思路
错误思路:先从左上角到右下角,沿途做标记,再从右下角返回左上角(不走标记位置),这个思路错误的原因是:这样表示的是其中后者到达了现在的位置,而前者早已经到达了这里。这么做看似没有问题,但却忽略了题目上一个很重要的条件:两个路径不能重复。例如,对于dp[2][2][3][3],它有可能是从dp[1][1][3][3]走来的,而dp[1][1][3][3]有可能是dp[1][1][2][2]走来。这里面,(2,2)这个坐标既出现在了第一个人的路径里,又出现在第二个人的路径里,显然是不可以的,而且后者是根据dp值进行计算,编程过程中无法确定当前dp中包含了之前哪些路径上的点。
因此需要两个人同时从起点出发并到达终点,即二人同时进行决策,进行状态转移,转移过程中判断是否出现路径重叠,若有则减去。
状态转移方程:
dp[x1][y1][x2][y2] = max(max(dp[x1][y1 - 1][x2 - 1][y2], dp[x1 - 1][y1][x2][y2 - 1]), max(dp[x1 - 1][y1][x2 - 1][y2], dp[x1][y1 - 1][x2][y2 - 1])) + grid[x1][y1] + grid[x2][y2]