题目描述:有一个m×n的矩阵,现要从左下角走到右上角,并且方向只能是向上或者向右,
现规定一条路径的权值为走此路径所经过的值的和。给定一个矩阵,请找出权值最大的一条
路径。
Example:
2 5 6
3 9 4
7 9 1
所找到的路径为7->9->9->5->6,权值为36。
首先我们来介绍一下动态规划的思想:
动态规划程序设计中,我们主要利用了问题的两个性质:最优子结构和子问
题重叠。最优子结构指问题的最优解包含了子问题的最优解,它是动态规划方法可
行的理论基础。而一个问题具有子问题重叠性质是指用递归算法自顶向下解这个问
题时,并不总是产生新的子问题,有些子问题被重复求解多次。
因为最优子结构性质,动态规划求问题最优解时,可以转化为求子问题的最优
解,而对解决过的问题,动态规划则记录它的结果,当再次遇上已解决的问题,就
可以直接利用结果。子问题重叠性质保证了这样做是有意义的。但一般的搜索技术
,对于某个子问题不管是否已经解决过,只要遇上,就会再次对这个子问题进行求
解。
很明显,动态规划与一般搜索技术最大不同的地方就是记录了已求解过的问题
的结果。这里包含了两个方面的内容 :子问题的记录和子问题结果的记录。其中
,子问题的记录是最重要,也是最为复杂的,它就是通常我们所说的状态表示。
通常我们用一个数、一组数或一个向量来实现状态表示。但无论采取什么方法,从
动态规划的原理来看,状态表示要满足两个要求:正确、合理描述子问题和描述的
子问题满足最优子结构性质;从算法实现角度来看,状态表示必须能够用基本数据
结构实现并且能满足空间要求。
现在我们来看上面的这个问题:(path[][]是矩阵的描述)
状态表示: 用maxpath[i][j]表示走到第i行第j列的最大权值,那么maxpath[i][j]的最优解
包含子问题maxpath[i-1][j]和maxpath[i][j+1]的最优解,然后我们采取倒推法,则可得到我
们的状态转移方程:
maxpath[i][j]

本文介绍了一个寻找m×n矩阵中从左下角到右上角最大路径和的问题,通过动态规划方法解决。动态规划的核心是利用最优子结构和子问题重叠性质,状态表示为maxpath[i][j],表示到达第i行第j列的最大路径和。通过状态转移方程maxpath[i][j] = MAX{ maxpath[i-1][j], maxpath[i][j+1] } + path[i][j],并采用倒推法求解。给出的Java代码实现展示了具体算法过程,最终返回最大路径和。"
41867883,676050,Jenkins权限控制重置指南,"['Jenkins', '权限管理', '配置']
最低0.47元/天 解锁文章
1432

被折叠的 条评论
为什么被折叠?



