【动态规划】【传纸条问题】求矩阵路径最大值(两条路径不能重复) 思路解析和代码

博客解析了一个动态规划问题——求矩阵路径最大值,其中两条路径不能重复。作者指出了错误思路,并详细阐述了正确解决方法,即两人同时决策避免路径重叠。状态转移方程包括两人同时向下、向右或一前一后的移动。注意要检查坐标是否重复以防止路径重叠。提供了个人实现的思路代码。
摘要由CSDN通过智能技术生成

【传纸条问题】求矩阵路径最大值(两条路径不能重复)

题目链接

个人思路

题意

可将问题简化为从矩阵的左上角走到右下角并返回左上角,且要求两条路径不能重复,求来回路径的权值最大

思路

错误思路:先从左上角到右下角,沿途做标记,再从右下角返回左上角(不走标记位置),这个思路错误的原因是:这样表示的是其中后者到达了现在的位置,而前者早已经到达了这里。这么做看似没有问题,但却忽略了题目上一个很重要的条件:两个路径不能重复。例如,对于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]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值