递归与动态规划---矩阵的最小路径和
来源:互联网 发布:广西安全知识网络竞赛 编辑:程序博客网 时间:2024/04/28 08:11
【题目】
给定一个矩阵m,从左上角开始每次都只能向下或者向右走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有路径中最小的路径和。
【基本思路】
生成和m同样大小的矩阵dp,dp[i][j]的值表示从左上角走到位置(i, j)的最小路径和,矩阵的第一行和第一列的值可以先确定,其他的位置dp[i][j]的值等于min(dp[i-1][j], dp[i][j-1])。
#python3.5#经典动态规划实现def minPathSum1(m): if m == None or len(m) == 0 or m[0] == None or len(m[0]) == 0: return 0 dp = [[0 for i in range(len(m[0]))] for j in range(len(m))] dp[0][0] = m[0][0] for i in range(1, len(m[0])): dp[0][i] = dp[0][i-1] + m[0][i] for j in range(1, len(m)): dp[j][0] = dp[j-1][0] + m[j][0] for i in range(1, len(m)): for j in range(1, len(m[0])): dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + m[i][j] return dp[len(m)-1][len(m[0])-1]#经过空间压缩的动态规划def minPathSum2(m): if m == None or len(m) == 0 or m[0] == None or len(m[0]) == 0: return 0 more = max(len(m), len(m[0])) less = min(len(m), len(m[0])) rowmore = True if more == len(m) else False dp = [0 for i in range(less)] dp[0] = m[0][0] for i in range(1, less): dp[i] = dp[i-1] + m[0][i] if rowmore else m[i][0] for i in range(1, more): dp[0] = dp[0] + m[i][0] if rowmore else m[0][i] for j in range(1, less): dp[j] = min(dp[j-1], dp[j]) + m[i][j] if rowmore else m[j][i] return dp[less-1]
阅读全文
2 0
- 递归与动态规划---矩阵的最小路径和
- 递归+动态规划 矩阵最小路径和
- 动态规划--矩阵最小的路径和
- 动态规划,矩阵最小路径和
- 动态规划--矩阵最小路径和
- 动态规划-----矩阵最小路径和
- 动态规划之矩阵的最小路径和
- 动态规划(三)暴力递归的优化之路——数字矩阵的最小路径和
- 动态规划3:矩阵最小路径和问题
- 动态规划——矩阵最小路径和
- 动态规划6:台阶问题和矩阵最小路径问题
- 动态规划---三角矩阵最小路径
- 递归与动态规划---最小编辑代价
- 动态规划求解矩阵累计和最大的路径
- java动态规划最小路径和
- Lintcode-动态规划-最小路径和
- 递归与动态规划---斐波那契系列问题的递归,动态规划与矩阵乘法
- 矩阵的最小路径和
- python 获取list tuple dict中最大和最小元素的操作
- VBA处理文件框架代码 【第四部分:bat定义】
- Apache Kafka 反序列化漏洞分析
- c语言时间常见获取办法
- 【寒江雪】C++中基本类型的大小
- 递归与动态规划---矩阵的最小路径和
- IDAPython_Note_1
- 设计模式--享元模式
- 判断用户是否是第一次进入某个页面
- 25. index
- LeetCode之Valid Parentheses
- JDK和JRE的区别
- 如何快速转载CSDN中的博客
- Java菜鸟面试突破系列之java虚拟机