动态规划专题——1 矩阵取数

本文探讨了一个矩阵取数的问题,其中你需要从左上角走到右下角,每次只能向右或向下移动,目标是最大化路径上数字的总和。通过分析,文章指出贪心策略并不适用,而枚举所有路径的时间复杂度过高。文章通过动态规划的方法,给出了求解最大路径和的递推公式,并解释了如何找到最大和的路径。最后,文章提供了一个N×N矩阵的示例,以及输出最大价值的预期结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定一个m行n列的矩阵,矩阵每个元素是一个正整数,你现在在左上角(第一行第一列),你需要走到右下角(第m行,第n列),每次只能朝右或者下走到相邻的位置,不能走出矩阵。走过的数的总和作为你的得分,求最大的得分。

初看此题,你的思路是什么?

(1) 贪心? 先走到大的数再说?看这个例子:
这里写图片描述

无论你以什么方式走到3,总和都是1 + 1 + 3 + 1 + 1 + 1 + 1 = 9
我们为了1个3,放弃了那么多个2, 不值啊。如果我们放弃3而走那些2, 得到的和是1 + 1 + 2 + 2 + 2 + 1 + 1 = 10
看来贪心是错的! 因为我们走到最大值时有很多值不能走到了,一个最大值会把我们带沟里去。

(2) 枚举?枚举是万能的嘛。

可以试试,有多少条可能的路径?

你需要往下走(m – 1)次,往右走(n – 1)次,才能走到右下角,一共走m + n – 2步!可行路径的总条数有C(m + n – 2, m - 1)。
每条路径长度是m + n – 1 ,所以总的时间复杂度是O(C(m + n – 2, m – 1) * (m + n – 1)), 试试看m = n = 100时,这个数有多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值