110 最小路径和

原题网址:https://www.lintcode.com/problem/minimum-path-sum/description

描述

给定一个只含非负整数的m*n网格,找到一条从左上角到右下角的可以使数字和最小的路径。

你在同一时间只能向下或者向右移动一步

标签

动态规划(DP)

思路:同数字三角形,创建动态规划数组dp【m】【n】,dp【i】【j】表示从左上角出发到达终点grid【i】【j】的最小路径和。

状态转移方程:dp【i】【j】= min(dp【i-1】【j】,dp【i】【j-1】)+ grid【i】【j】;

为计算方便,第一行和第一列可以单独初始化。

最后 return dp【m-1】【n-1】。

AC代码:

class Solution {
public:
    /**
     * @param grid: a list of lists of integers
     * @return: An integer, minimizes the sum of all numbers along its path
     */
    int minPathSum(vector<vector<int>> &grid) {
        // write your code here
        int row=grid.size();
    if (row==0)
    {
        return 0;
    }
    int col=grid[0].size();
    vector<vector<int>> dp(row,vector<int>(col,0));
    dp[0][0]=grid[0][0];
    for (int i=1;i<row;i++)//第一列;
    {
        dp[i][0]=dp[i-1][0]+grid[i][0];
    }
    for (int j=1;j<col;j++)//第一行;
    {
        dp[0][j]=dp[0][j-1]+grid[0][j];
    }

    for (int i=1;i<row;i++)
    {
        for (int j=1;j<col;j++)
        {
            dp[i][j]=min(dp[i][j-1],dp[i-1][j])+grid[i][j];
        }
    }
    return dp[row-1][col-1];
    }
};

原文地址:https://www.cnblogs.com/Tang-tangt/p/9133246.html

时间: 2024-08-01 18:54:49

110 最小路径和的相关文章

LintCode 110. 最小路径和

给定一个只含非负整数的m*n网格,找到一条从左上角到右下角的可以使数字和最小的路径. class Solution { public: /* * @param grid: a list of lists of integers * @return: An integer, minimizes the sum of all numbers along its path */ int minPathSum(vector<vector<int>> &grid) { // writ

[swustoj1739] 魔术球问题 (最大流,最小路径覆盖)

题目链接:https://www.oj.swust.edu.cn/problem/show/1739 从1开始枚举球的个数,每次从残余网络更新总流量,最小路径覆盖刚好大于n时ret-1便是最多球. 之后根据容量为0的边找回匹配边即可. 用x << 1和x << 1 | 1拆点 比较方便. 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 typedef struct Edge { 5 int u, v, w, n

HDU - 3861 The King’s Problem (强连通分量+最小路径覆盖)

思路:tarjarn缩点,然后剩下的就是纯粹的最小路径覆盖,最小路径覆盖=顶点数-匹配数.匹配数跑一遍匈牙利即可. 1 #include <iostream> 2 #include <queue> 3 #include <stack> 4 #include <cstdio> 5 #include <vector> 6 #include <map> 7 #include <set> 8 #include <bitset

[HDOJ1151]Air Raid(最小路径覆盖,匈牙利算法)

题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1151 题意:就是求最小路径覆盖,根据定义出的题. 1 /* 2 ━━━━━┒ギリギリ♂ eye! 3 ┓┏┓┏┓┃キリキリ♂ mind! 4 ┛┗┛┗┛┃\○/ 5 ┓┏┓┏┓┃ / 6 ┛┗┛┗┛┃ノ) 7 ┓┏┓┏┓┃ 8 ┛┗┛┗┛┃ 9 ┓┏┓┏┓┃ 10 ┛┗┛┗┛┃ 11 ┓┏┓┏┓┃ 12 ┛┗┛┗┛┃ 13 ┓┏┓┏┓┃ 14 ┃┃┃┃┃┃ 15 ┻┻┻┻┻┻ 16 */

[网络流24题] 最小路径覆盖问题

Description 问题描述: 给定有向图G=(V,E).设P 是G 的一个简单路(顶点不相交)的集合.如果V 中每个顶点恰好在P 的一条路上,则称P是G 的一个路径覆盖.P 中路径可以从V 的任何一个顶点开始,长度也是任意的,特别地,可以为0.G 的最小路径覆盖是G 的所含路径条数最少的路径覆盖.设计一个有效算法求一个有向无环图G 的最小路径覆盖. 编程任务: 对于给定的给定有向无环图G,编程找出G的一个最小路径覆盖. Input Format 文件第1 行有2个正整数n和m.n是给定有向

POJ3216 最小路径覆盖

首先说一下题意,Q个区域,M个任务,每个区域任务可能有多个,然后给你个到各地所需时间的矩阵,每个任务都有开始和持续时间,问最少需要多少工人? 每个工人只能同时执行一个任务. 通过题意,我的瞬间反应就是先把点拆开再说,因为每个区域可能有多个任务,所以把每个任务都当做一点处理,之后就需要考虑一件事情,一个工人在Qi区域做完之后是不是应该去一个离他最近且正好有任务的地方Qj,那么他从Qi到Qj是不是应该走最近的路线? 下一步就出来了,求出所有区域之间的最短距离,用floyd一键搞定.然后就可以建图(有

HDU 3861 The King&#39;s Problem(强连通分量缩点+最小路径覆盖)

http://acm.hdu.edu.cn/showproblem.php?pid=3861 题意: 国王要对n个城市进行规划,将这些城市分成若干个城市,强连通的城市必须处于一个州,另外一个州内的任意两个城市u,v,有从u到v的路径或从v到u的路径.求最少可以分成几个州. 思路: 这道题目挺好. 首先,强连通分量进行缩点,重新建图. 新建的图就是一个DAG图,接下来就转换成了最小路径覆盖问题. 最小路径覆盖就是用尽量少的不相交的简单路径覆盖DAG的所有顶点.每个顶点只属于一条路径,单个顶点也可以

bzoj 2150 最小路径覆盖

最小路径覆盖问题是:给定一个DAG,该DAG的一个路径覆盖是一个路径的集合,使得每个点属于且仅属于其中一条路径,问题就是求一个大小最小的路径集合. 做法是将每个点A拆成两个点A1,A2,如果A->B,那么连A1->B2求一个最大匹配. 一个结论是:最小路径数 = 点数 - 最大匹配 证明的大概思路是: 一个路径覆盖与一个边独立集(即一个匹配)一一对应. 一个路径覆盖的路径数 = 点数 - 匹配数 ( 因为 路径数+每条路径的边数和-1 = n个点的无向联通无环图的边数 , 匹配数等于每条路径的

【LA3126 训练指南】出租车 【DAG最小路径覆盖】

题意 你在一座城市里负责一个大型活动的接待工作.明天将有m位客人从城市的不同的位置出发,到达他们各自的目的地.已知每个人的出发时间,出发地点和目的地.你的任务是用尽量少的出租车送他们,使得每次出租车接客人时,至少能提前一分钟到达他所在的位置.注意,为了满足这一条件,要么这位客人是这辆出租车接送的第一个人,要么在接送完上一个客人后,有足够的时间从上一个目的地开到这里. 为了简单起见,假定城区是网格型的,地址用坐标(x,y)表示,出租车从(x1,y1)到(x2,y2)处需要行驶|x1-x2|+|y1