返回

[动态规划]BM68 矩阵的最小路径和-中等

发布时间:2022-10-21 01:05:48 320
# c++# 数据

​​BM68 矩阵的最小路径和​​

知识点​​数组​​​​动态规划​​

描述

给定一个 n * m 的矩阵 a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的路径中最小的路径和。

数据范围,矩阵中任意值都满足 

要求:时间复杂度 

例如:当输入[[1,3,5,9],[8,1,3,4],[5,0,6,1],[8,8,4,0]]时,对应的返回值为12,所选择的最小累加和路径如下图所示:[动态规划]BM68 矩阵的最小路径和-中等_路径和_04

示例1

输入:

[[1,3,5,9],[8,1,3,4],[5,0,6,1],[8,8,4,0]]

复制返回值:

12

复制

示例2

输入:

[[1,2,3],[1,2,3]]

复制返回值:

7

题解

 

状态转移方程:

dp[i, j] = min(dp[i - 1][j], dp[i][j - 1]) + matrix[i][j]

代码如下:

#include <bits/stdc++.h>

using namespace std;

int minPathSum(vector<vector<int>> &matrix)
{
if (matrix.size() == 0 || matrix[0].size() == 0)
{
return 0;
}

int m = matrix.size();
int n = matrix[0].size();
std::vector<std::vector<int>> dp(m, std::vector<int>(n, 0));
for (int i = 0; i < m; ++i)
{
for (int k = 0; i < n; ++k)
{
if (k == 0)
{
if (i == 0)
{
dp[i][k] = matrix[i][k];
}
else
{
dp[i][k] = dp[i - 1][k] + matrix[i][k];
}
}
else if (i == 0)
{
dp[i][k] = dp[i][k - 1] + matrix[i][k];
}
else
{
dp[i][k] = matrix[i][k] + std::min(dp[i - 1][k], dp[i][k - 1]);
}
}
}
return dp[m - 1][n - 1];
}
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
[动态规划]BM66 最长公共子串-中等 2022-10-21 00:31:08