矩阵的最小路径和
来源:互联网 发布:js将时间字符串格式化 编辑:程序博客网 时间:2024/04/27 07:46
题目
给定一个矩阵,从左上角开始,每次只能向右或向下走,最后到达右下角位置,路径上所有的数字累加起来就是路径和,返回所有的路径中最小的路径和。
如
1 3 5 9
8 1 3 4
5 0 6 1
8 8 4 0
思路
经典动态规划方法,假设矩阵m行数为M, 列为N,先生成大小和矩阵相等的矩阵dp,dp [i][j]表示从左上角(0,0)位置走到(i, j)位置的最小路径和。对m的第一行来说,从(0,0)位置到(0,i)位置只能右走,因此,(0,0)位置到(0,j)位置的路径和就是m[0][0…j]累加的结果,同理可得第一列的值。从(0,0)到(i,j)的路径必然经过位置(i-1,j)或(i, j-1),所以,dp[i][j]=min{dp[i-1][j], dp[i][j-1]} + m[i][j];
代码
#include<algorithm>#include<iostream>#include<cstring>using namespace std;int main() { int m, n; cin >> m >> n; int arr[m][n]; int dp[m][n]; memset(dp, 0, sizeof(dp)); for(int i=0; i<m; i++) for(int j=0; j<n; j++) cin >> arr[i][j]; dp[0][0] = arr[0][0]; for(int i=1; i<m; i++) dp[i][0] = dp[i-1][0]+arr[i][0]; for(int i=1; i<n; i++) dp[0][i] = dp[0][i-1]+arr[0][i]; for(int i=1; i<m; i++) for(int j=1; j<n; j++) dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + arr[i][j]; cout << dp[m-1][n-1] << endl;}
0 0
- 矩阵的最小路径和
- 矩阵的最小路径和
- 矩阵的最小路径和
- 矩阵的最小路径和
- 矩阵的最小路径和
- 矩阵的最小路径和
- 矩阵最小路径和
- 矩阵最小路径和
- 矩阵的最小路径和 [DP]
- 动态规划--矩阵最小的路径和
- 矩阵最小路径和练习
- 矩阵的最小路径之和
- 矩阵的最小路径和(空间压缩)
- 递归与动态规划---矩阵的最小路径和
- 动态规划之矩阵的最小路径和
- 动态规划,矩阵最小路径和
- 矩阵最小路径和(java实现)
- 动态规划--矩阵最小路径和
- HDU 1272 小希的迷宫
- (2017、4/8/ D
- Aibohphobia
- 025替换元素内容
- django 数据库迁移(migrate)应该知道的一些事
- 矩阵的最小路径和
- Python之列表生成式
- 对css的简单介绍
- TensorFlow实战10:ResNet实现及时间测评
- 浅谈数据结构——二叉查找树实现原理分析
- csharp基础009运算符
- 前端学习笔记之Html标签元素类别
- POJ 3280 Cheapest Palindrome dp
- css多行文本溢出显示省略号...的方法