题目:给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小,每次只能向下或者向右移动一步

输入:
[[1,3,1],[1,5,1],[4,2,1]
]
输出: 7
解释: 因为路径 1→3→1→1→1 的总和最小。

先给出动态规划方程:dp[i][j] = min(dp[i-1][j],dp[i][j-1])+grid[i][j]

求左上到右下的最小路径和,看来又一个累加问题,可以从局部最小和到整体最小和。为了方便说明,我们对矩阵进行标号,左上角对于[0][0]位,右下角对应[2][2]位。到达[2][2]位可以从[1][2]或[2][1]到达,这就转化为从[0][0]到[1][2]和从[0][0]到[2][1]中取最小值。下面给出代码:

#include<iostream>
#include<vector>
using namespace std;void printSum(vector<vector<long long>> sum)
{for(int k=0;k<3;k++){    for(int z=0;z<3;z++){cout << sum[k][z] << ",";}cout << endl;}
}int minPathSum(vector<vector<int>>& grid) {int n=grid.size();  //这个vector里有几个vector元素int m=grid[0].size(); //vector里面的vector大小vector<vector<long long>> sum(n,vector<long long>(m,0));int i,j;sum[0][0] = grid[0][0];//左上角for(i=1; i<n; i++)//纵向求和{sum[i][0] = sum[i-1][0]+grid[i][0];}for(j=1; j<m; j++)//横向求和{sum[0][j] = sum[0][j-1]+grid[0][j];}//n表示纵向,m表示横向for(i=1; i<n; i++){for(j=1; j<m; j++){cout << "-------sum" << endl;printSum(sum);cout << "-----------------detail" << endl;cout << "grid[i][j]=" << grid[i][j] << endl;cout << "min=" << min(sum[i-1][j],sum[i][j-1]) << endl;sum[i][j] = grid[i][j]+min(sum[i-1][j],sum[i][j-1]);}cout << "*******************************" << endl;}return sum[i-1][j-1];
}int main(){vector<vector<int>> v={{1,3,1},{1,5,1},{4,2,1}}; int n = minPathSum(v);cout<< "n=" << n << endl;
}

运行结果:

-------sum
1,4,5,
2,0,0,
6,0,0,
-----------------detail
grid[i][j]=5
min=2
-------sum
1,4,5,
2,7,0,
6,0,0,
-----------------detail
grid[i][j]=1
min=5
*******************************
-------sum
1,4,5,
2,7,6,
6,0,0,
-----------------detail
grid[i][j]=2
min=6
-------sum
1,4,5,
2,7,6,
6,8,0,
-----------------detail
grid[i][j]=1
min=6
*******************************
n=7

sum用来存储从[0][0]到sum[i][j]路径的最小和,看看每次sum的变化,sum[1][1] = 7表明从[0][0]到[1][1]路径最小和是7,程序先把第2行对于的sum都求出来,再把第2列对应的sum都求出来,最后求sum[2][2]就很容易了。

参考地址:https://blog.csdn.net/weixin_43750513/article/details/106738099

动态规划算法--矩形最小路径和相关推荐

  1. 算法-------三角形最小路径和(Java版本)

    题目 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上.相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点.例如,给定三 ...

  2. leetcode算法题--最小路径和

    原题链接:https://leetcode-cn.com/problems/minimum-path-sum/ 相关题目:不同路径 动态规划: dp[i][j]表示走到(i,j)点的最小路径和 状态转 ...

  3. 数字三角形路径最小值c语言题目,算法学习——动态规划之点数值三角形的最小路径...

    算法描述在一个n行的点数值三角形中,寻找从顶点开始每一步可沿着左斜或者右斜向下直到到达底端,使得每个点上的数值之和为最小 右图为一个4行的点数值三角形 算法思路接收用户输入行数n 使用一个二维数组a[ ...

  4. 【常见笔试面试算法题12续集二】动态规划算法案例2矩阵最小路径和练习题

    加qq1126137994 一起学习更多技术!!! 有一个矩阵map,它每个格子有一个权值.从左上角的格子开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有 ...

  5. 三角形最小路径和(动态规划)

    原创公众号:bigsai 欢迎加入力扣打卡 文章已收录在 全网都在关注的数据结构与算法学习仓库 欢迎star 题目描述 力扣120原题 给定一个三角形 triangle ,找出自顶向下的最小路径和. ...

  6. Leetcode120.三角形的最小路径和 -- DP算法

    Time: 20190831 题目描述 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [[2],[3,4],[6,5,7],[4,1,8,3] ...

  7. 动态规划示例汇总-Java版(组合硬币、跳台阶、最小路径和、最长递增子序列、最长公共子序列、01背包问题、最小编辑代价)

    动态规划算法示例汇总-Java版 组合硬币 Java解题-暴力搜索 Java解题-记忆搜索 Java解题-动态规划(两种写法) 跳台阶 Java解题-暴力递归 Java解题-动态规划 矩阵最小路径和 ...

  8. leetcode算法题--下降路径最小和

    原题链接:https://leetcode-cn.com/problems/minimum-falling-path-sum/ 相关题目:三角形最小路径和 动态规划 dp[i][j]表示[i,j]位置 ...

  9. 算法题解:最小编辑距离(动态规划算法)

    题目分析 题目链接:https://leetcode.com/problems... 对于长度为x的字符串s1和长度为y的字符串s2,从s1改变成s2最少要经过多少次"增加".&q ...

最新文章

  1. ASP.NET的WebFrom组件LinkButton编程
  2. apache配置支持mysql_Apache Kylin | 建立 JDBC 数据源
  3. 【线性回归】面向新手的基础知识
  4. python 网格交易源码下载_GitHub - xiongyixiaoyang/grid-trading: 网格交易(期货) ,基于网格交易方法的交易策略...
  5. mysql备份还原数据库操作系统_mysql 命令行备份还原数据库操作
  6. Win7下的内置FTP组件的设置详解
  7. python cannot import name main_virtualenv: cannot import name 'main'
  8. 人人都在讲数据治理而不问业务,这很危险
  9. selenium--下拉列表选择
  10. nc财务系统适配的java_用友NC系统使用过程中常见问题和解决方法!财会必看!...
  11. Windows系统安装Redis(详细)
  12. Python Qt GUI设计简介、环境下载和安装(基础篇—1)
  13. ubuntu18.04 最小安装后,setting-sharing 中没有了共享屏幕的选项,解决办法如下:
  14. Pixhawk学习笔记(5)——PX4FLOW光流传感器调试过程记录
  15. Python基础篇:你好,世界!
  16. C语言C++情人节红玫瑰代码
  17. java课前演讲讲什么_课前演讲讲什么比较有创意(逼格)?
  18. python实现一个简单的项目建议书范文_建议收藏,22个Python迷你项目(附源码)
  19. 《复联3》的幕后有一位来自中国的角色技术指导!
  20. 理解extends与implements

热门文章

  1. Google protobuf使用技巧和经验
  2. bzoj 1045 [HAOI2008] 糖果传递 —— 贪心
  3. 【BZOJ 4555】[Tjoi2016Heoi2016]求和 多项式求逆/NTT+第二类斯特林数
  4. python全栈开发基础【第二十三篇】线程
  5. alert和console的区别
  6. JAVA基础代码分享--模拟人机猜拳系统
  7. 云计算之路-试用Azure:数据库备份压缩文件在虚拟机上的恢复速度测试
  8. WPF多表头技术探索总结
  9. 无标题窗体的移动及其简单美化
  10. bg和fg指令(整理)以及 Linux中Ctrl+C、Ctrl+D等按键操作进程相关命令