从左上角到右下角的最小距离和

2024-05-24 22:44

本文主要是介绍从左上角到右下角的最小距离和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述:给定一个二维数组matrix,一个人必须从左上角出发,最后到达右下角,沿途只可以向下或者向右走,沿途的数字都累加就是距离累加和,返回最小距离累加和。

way:无他,dp[i] [j]表示(i,j)坐标位置的最小距离和。

#include<iostream>
#include<vector>
using namespace std;int minPathSum(vector<vector<int>> matrix)
{int row=matrix.size();int col=matrix[0].size();vector<vector<int>>dp(row,vector<int>(col));dp[0][0]=matrix[0][0];//第一行的dp值只能从左边过来for(int j=1; j<col; j++){dp[0][j]=dp[0][j-1]+matrix[0][j];}//第一列的dp值只能从上边过来for(int i=1; i<row; i++){dp[i][0]=dp[i-1][0]+matrix[i][0];}//从第二行第二列及其后的dp值可以从左边或上边过来for(int i=1; i<row; i++){for(int j=1; j<col; j++){dp[i][j]=max(dp[i-1][j],dp[i][j-1])+matrix[i][j];}}return dp[row-1][col-1];
}

way2:一层dp。

//改成一层dp
int minPathSum2(vector<vector<int>> matrix)
{int row=matrix.size();int col=matrix[0].size();vector<int>dp(col);//初始值dp[0]=matrix[0][0];//第一行的值for(int j=1; j<col; j++){dp[j]=dp[j-1]+matrix[0][j];}//从第二行及其往后的行的值for(int i=1; i<row; i++){//表示第一列的值只能从上面过来dp[0]+=matrix[i][0];for(int j=1; j<col; j++){//dp[j]是上一行的dp[j],dp[j-1]是这一行更新的最新的dp[j-1]dp[j]=min(dp[j],dp[j-1])+matrix[i][j];}}return dp[col-1];
}

这篇关于从左上角到右下角的最小距离和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/999747

相关文章

LeetCode--155 最小栈

题目 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) -- 将元素 x 推入栈中。pop() -- 删除栈顶的元素。top() -- 获取栈顶元素。getMin() -- 检索栈中的最小元素。 示例 MinStack minStack = new MinStack();minStack.push(-2);minStack.push

Ural 1277 cops ans thieves (最小割模型)

题目地址 :http://acm.timus.ru/problem.aspx?space=1&num=1277 这里我们要拆点。把一个点拆成i,i' 。如何 i,j有边 ,在建边(i,j',inf),(j,i',inf)。 然后每个点点边(i',i,R[i])。这样建边以后,若要阻止 s到f的路径,那么必须破败一些边,那么我们为了是的边权最小,必须破坏边权小于inf的边,对应的就是图中拆

hdu 2586 树上点对最近距离 (lca)

,只要知道dis[i][j]=dis[i][root]+dis[j][root]-2*dis[Lca(i,j)][root].   其中root为树的根节点,LCA(i,j)为i,j的最近公共祖先。 所以我们先把所有的询问储存下来,然后离线直接查询。复杂度是o(n+q)的。 VIE #include<cstdio>#include<algorithm>#include<i

动态规划DP--斐波那契数、爬楼梯、使用最小花费爬楼梯等示例代码

动态规划DP 文章目录 动态规划DP509. 斐波那契数70. 爬楼梯746. 使用最小花费爬楼梯62. 不同路径63. 不同路径II343.整数拆分 509. 斐波那契数 509. 斐波那契数 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) = 0,F(1) =

【数学】100332. 包含所有 1 的最小矩形面积 II

本文涉及知识点 数学 LeetCode100332. 包含所有 1 的最小矩形面积 II 给你一个二维 二进制 数组 grid。你需要找到 3 个 不重叠、面积 非零 、边在水平方向和竖直方向上的矩形,并且满足 grid 中所有的 1 都在这些矩形的内部。 返回这些矩形面积之和的 最小 可能值。 注意,这些矩形可以相接。 示例 1: 输入: grid = [[1,0,1],[1,1,1]]

Day 31:100334. 包含所有1的最小矩形面积Ⅰ

Leetcode 100334. 包含所有1的最小矩形面积Ⅰ 给你一个二维 **二进制 **数组 grid。请你找出一个边在水平方向和竖直方向上、面积 最小 的矩形,并且满足 grid 中所有的 1 都在矩形的内部。 返回这个矩形可能的 **最小 **面积。 确定首次出现 1 的第一行 top,最后一次出现 1 的最后一列 r,最后一次出现 1 的最后一行 bottom,首次出现的第

今天遇到的3到智力面试题(给工人分金条,小鸟来回在2火车之间飞行的距离,精确称水问题)

智力题1:你让工人为你工作7天,给工人的回报是一根金条。金条平分成相连的7段,你必须在每天结束时给他们一段金条,如果只许你两次把金条弄断,你如何给你的工人付费? 答:把金条2次弄断的方式是第一次1,6分,,然后把剩余的6用2,4分,即弄断2次为1段、2段、4段 第一天给1段, 第二天让工人把1段归还给2段, 第三天给1段, 第四天归还1段和2段,给4段。 第五天给1段, 第六天给2

百度笔试题:找最小的不重复数

版权所有。所有权利保留。 欢迎转载,转载时请注明出处: http://blog.csdn.net/xiaofei_it/article/details/17123835 给定任意一个正整数,求比这个数大且最小的“不重复数”,“不重复数”的含义是相邻两位不相同,例如1101是重复数,而1201是不重复数。 思路很简单: 1、把原数加1。 2、从高位开始找重复位。 3

【洛谷P3366】【模板】最小生成树 解题报告

洛谷P3366 -【模板】最小生成树 题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出 orz。 输入格式 第一行包含两个整数 N , M N,M N,M,表示该图共有 N N N 个结点和 M M M 条无向边。 接下来 M M M 行每行包含三个整数 X i , Y i , Z i X_i,Y_i,Z_i Xi​,Yi​,Zi​,表示有一条长度为 Z

计算两个字符串的距离(递归搜索会爆栈)

/*很经典的可使用动态规划方法解决的题目,和计算两字符串的最长公共子序列相似。设Ai为字符串A(a1a2a3 … am)的前i个字符(即为a1,a2,a3 … ai)设Bj为字符串B(b1b2b3 … bn)的前j个字符(即为b1,b2,b3 … bj)设 L(i,j)为使两个字符串和Ai和Bj相等的最小操作次数。当ai==bj时 显然 L(i,j) = L(i-1,j-1)当ai!=