加qq1126137994 一起学习更多技术!!!

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

给定一个矩阵map及它的行数n和列数m,请返回最小路径和。保证行列数均小于等于100.

测试样例:
[[1,2,3],[1,1,1]],2,3
返回:4

分析
假设矩阵m的大小为M*N,行数为M,列数为N,生成大小和m一样的矩阵dp,行数为M,列数为N,dp[i][j]的值等于m矩阵从左上角,也就是(0,0)
走到(i,j)位置的最小路径和。

第一行与第一列,通常都是可以通过一个循环求出来的:
第一行的值:只能是从左往右走,路径最小值为前一个方格的路径最小值加上本方格所对应的权值,即dp[0][j] = dp[0][j-1]+m[i][j]
第一列的值:只能是从上往下走,路径最小值为上一个方格的路径最小值加上本方格所对应的权值;即dp[i][0] = dp[i-1][0]+m[i][j]

那么除了第一行和第一列的值,其他部分的值为(只能是从上面过来,或者从左边过来):

最终,右下角的值,就为我们所要求的值:

实现代码如下:

class MinimumPath {
public:int R_min(int m,int n){if(m>=n)return n;elsereturn m;}int getMin(vector<vector<int> > map, int n, int m) {// write code here//额外开辟一个dp矩阵,并将dp矩阵所有值初始化为0vector<vector<int> > dp(n,vector<int>(m,0));//矩阵的第一个空格的值就等于map矩阵的第一个值的本身dp[0][0]= map[0][0];//先求第一行的值for(int j=1;j<m;j++){dp[0][j] = dp[0][j-1] + map[0][j];}//再求第一列的值for(int i=1;i<n;i++){dp[i][0] = dp[i-1][0] + map[i][0];}//最后求其他行的值for(int i=1;i<n;i++){for(int j=1;j<m;j++){dp[i][j]=R_min(dp[i-1][j]+map[i][j],dp[i][j-1]+map[i][j]);}}return dp[n-1][m-1];}
};

以上程序,求两个数的最小值并返回是可以不写的。可以直接用库函数min();但是我是因为不熟悉C++的库函数,所以自己写了一个,影响不大!!!

以上的分析思路,依然是:先解决子问题!!!何为子问题?就是我们把所要求的整体的问题,化简到最简单的情况,比如,上面的题,我们要求走到最右下角的路径的最小值,那么我们就化简,化简到,整个矩阵为1个方格,2个方格,3个方格,4个方格…… 时的最短路径的求解,然后,前面的子问题求出来了,我们会发现,通过前面子问题的整合,可以求得整体问题,也就是最终,我们可以求得最右下角的值,这也避免了,很多的重复计算,更加避免了递归所带来的复杂的运算顺序!!!

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

  1. 【常见笔试面试算法题12续集四】动态规划算法案例分析4 LCS练习题练习题(最长公共子序列的长度)

    学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 给定两个字符串A和B,返回两个字符串的最长公共子序列的长度.例如,A ...

  2. 【常见笔试面试算法题12续集六】动态规划算法案例分析6 最优编辑练习题

    学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 对于两个字符串A和B,我们需要进行插入.删除和修改操作将A串变为B串 ...

  3. 【常见笔试面试算法题12续集五】动态规划算法案例分析5 01背包练习题

    学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 一个背包有一定的承重cap,有N件物品,每件都有自己的价值,记录在数 ...

  4. 【常见笔试面试算法题12续集一】动态规划算法案例1台阶问题练习题

    加qq1126137994 一起学习更多技术!!! 以下问题,都可以用非动态规划的方法做,我为了整理动态规划的方法思路,就全部用动态规划的思路来解决问题,这样还可以简化问题的处理,是时间复杂度更低!! ...

  5. 【常见笔试面试算法题12续集三】动态规划算法案例分析3 LIS练习题(最长上升子序列)

    学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 这是一个经典的LIS(即最长上升子序列)问题,请设计一个尽量优的解法 ...

  6. 九月迅雷,华为,阿里巴巴,最新笔试面试十题

    九月迅雷,华为,阿里巴巴,最新笔试面试十题 8月15日,百度2道面试题: 1.来自<编程之美>的概率题:一个桶里面有白球.黑球各100个,现在按下述规则取球:的     i .每次从通里面 ...

  7. 武汉大学计算机学院自主招生考试内容,武汉大学自主招生笔试面试真题

    武汉大学自主招生笔试面试真题2018-10-20 14:16:33文/叶丹 自主招生考试中,笔试和面试是考生和家长最为关注的,而每年都有关于自主招生脑洞大开的题目,大家很好奇自主招生考试都考什么?下面 ...

  8. 九月百度,迅雷,华为,阿里巴巴,最新校招笔试面试十题(更新至9.24)

    题记 本博客自2010年10月11日开通以来,已经帮助了一大批人找到工作,特别是连续三年在每一年的9.10月份陪伴了至少三届毕业生找工作的旅程,包括校招中的笔试面试,今年也不会例外,我会在本博客开通3 ...

  9. 汇总5大Python常用笔试面试真题,知己知彼方能百战不殆

    俗话说的好,打仗之前知晓敌方的军情越多,获胜的把握也会越大,知己知彼方能百战不殆嘛!换个角度来说,如今的面试不正是和古代打战一样嘛,知晓的越多,成功几率也就越大,小编今天就为大家汇总了5大Python ...

最新文章

  1. [Notes] Bash Shell特性
  2. java重写paint方法时怎么样不覆盖文字_美团十月社招Java面试题合集,JVM+Spring+Spring,看了答案其实也不难...
  3. java定时器的使用
  4. 【渝粤题库】陕西师范大学151210 成本会计作业 (专升本)
  5. 苦逼or高薪程序猿,你选谁?WEB前端这个行业普遍年薪20万+,吃鸡如开挂!
  6. jQuery学习(二)—jQuery对象的获取
  7. [转贴]一个农村高考落榜生的心路历程
  8. 软件功能测试怎么把关指标,软件测试方法经与验.doc
  9. VSCODE如何汉化成中文
  10. java前后端分离开发思路
  11. wdr7660虚拟服务器设置,TP-LINK WDR7660用手机怎么设置?
  12. QGC 谷歌中国地图 火星坐标系 转换
  13. PCIE配置空间设置
  14. safari看html5卡顿,MacOS下Safari 10浏览器卡顿解决方案整理 - YangJunwei
  15. html怎么设置左侧区域宽度,【CSS】左侧定宽、右侧宽度自适应布局
  16. 华为OD机试 - 完美走位(Java JS Python)
  17. Matlab人形机器人建模与仿真
  18. 教你用python制作证件照片啦学会再也不用跑去照相馆拍照了~
  19. 如何在网页端登录企业邮箱修改密码?
  20. 中国石斛行业渠道营销策略与发展态势研究报告2022版

热门文章

  1. 第十一期:数据挖掘其实就是为了干这四种事?
  2. html:(8):span标签和q标签
  3. java学习(62):java抽象类
  4. vue中mode的设置
  5. Kubernetes探索学习005--Kubernetes的Controller模型和ReplicaSet伸缩
  6. Java第一次上机实验源代码
  7. PHP 超级全局变量
  8. 《掌握需求过程》阅读笔记05
  9. mysql string types ---- mysql 字符类型详解
  10. MongoDB分析工具之三:db.currentOp()