当前位置:网站首页>LeetCode 5270. 网格中的最小路径代价(动态规划)
LeetCode 5270. 网格中的最小路径代价(动态规划)
2022-06-13 09:06:00 【Michael阿明】
文章目录
1. 题目
给你一个下标从 0 开始的整数矩阵 grid ,矩阵大小为 m x n
,由从 0 到 m * n - 1
的不同整数组成。 你可以在此矩阵中,从一个单元格移动到 下一行 的任何其他单元格。如果你位于单元格 (x, y)
,且满足 x < m - 1 ,你可以移动到 (x + 1, 0), (x + 1, 1), ..., (x + 1, n - 1)
中的任何一个单元格。注意: 在最后一行中的单元格不能触发移动。
每次可能的移动都需要付出对应的代价,代价用一个下标从 0 开始的二维数组 moveCost 表示,该数组大小为 (m * n) x n
,其中 moveCost[i][j]
是从值为i
的单元格移动到下一行第 j 列
单元格的代价。从 grid 最后一行的单元格移动的代价可以忽略。
grid 一条路径的代价是:所有路径经过的单元格的 值之和 加上 所有移动的 代价之和 。 从 第一行 任意单元格出发,返回到达 最后一行 任意单元格的最小路径代价。
示例 1:
输入:grid = [[5,3],[4,0],[2,1]],
moveCost = [[9,8],[1,5],[10,12],[18,6],[2,4],[14,3]]
输出:17
解释:最小代价的路径是 5 -> 0 -> 1 。
- 路径途经单元格值之和 5 + 0 + 1 = 6 。
- 从 5 移动到 0 的代价为 3 。
- 从 0 移动到 1 的代价为 8 。
路径总代价为 6 + 3 + 8 = 17 。
示例 2:
输入:grid = [[5,1,2],[4,0,3]],
moveCost = [[12,10,15],[20,23,8],[21,7,1],[8,1,13],[9,10,25],[5,3,2]]
输出:6
解释:
最小代价的路径是 2 -> 3 。
- 路径途经单元格值之和 2 + 3 = 5 。
- 从 2 移动到 3 的代价为 1 。
路径总代价为 5 + 1 = 6 。
提示:
m == grid.length
n == grid[i].length
2 <= m, n <= 50
grid 由从 0 到 m * n - 1 的不同整数组成
moveCost.length == m * n
moveCost[i].length == n
1 <= moveCost[i][j] <= 100
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/minimum-path-cost-in-a-grid 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
dp[i][j]
表示到达(i, j)
时的最小代价
class Solution {
public:
int minPathCost(vector<vector<int>>& grid, vector<vector<int>>& moveCost) {
int m = grid.size(), n = grid[0].size();
vector<vector<int>> dp(m, vector<int>(n, INT_MAX));
for(int j = 0; j < n; ++j)
dp[0][j] = grid[0][j];
for(int i = 1; i < m; ++i)
{
for(int j = 0; j < n; ++j)
{
for(int k = 0; k < n; ++k)
{
dp[i][j] = min(dp[i][j], dp[i-1][k]+moveCost[grid[i-1][k]][j]+grid[i][j]);
}
}
}
return *min_element(dp.back().begin(), dp.back().end());
}
};
272 ms 78.5 MB C++
边栏推荐
- LeetCode 343. 整数拆分
- 线上调试工具Arthas高级
- What are the bank financial products? How long is the liquidation period?
- an error occurred while trying to rename a file in the destination directory code 5
- 20211018 some special matrices
- C language: deep understanding of character functions and string functions (1)
- C language: Simulated Implementation of library function strcpy
- Tutorial (5.0) 02 Management * fortiedr * Fortinet network security expert NSE 5
- Use typescript to complete simple snake eating function
- 20211108 A转置乘A是正定矩阵吗?A转置乘A是正定矩阵的充分必要条件是什么?
猜你喜欢
Routing - static routing
Detailed explanation of C language callback function
Neo4j - CQL使用
IP address introduction
[network security penetration] if you don't understand CSRF? This article gives you a thorough grasp
Cisco, Huawei network equipment
Overview of common layers of image recognition neural network (under update)
QObject::connect: Cannot queue arguments of type ‘QTextCursor‘ (Make sure ‘QTextCursor‘ is registere
Cmake Learning Series I
C language: deep understanding of character functions and string functions (1)
随机推荐
CAS NO lock
C language: data storage in memory
LeetCode 343. 整数拆分
20211108 differential tracker
JUC atomic reference and ABA problem
QT multithreaded TCP server
20211006 积分、微分、投影均属于线性变换
Use typescript to complete simple snake eating function
Redirect vulnerability analysis of network security vulnerability analysis
教程篇(5.0) 02. 管理 * FortiEDR * Fortinet 网络安全专家 NSE 5
JUC Unsafe
C language: sanziqi
线上调试工具Arthas高级
20211104 why is the trace of a matrix equal to the sum of eigenvalues, and why is the determinant of a matrix equal to the product of eigenvalues
Lecture par lots de tous les fichiers vocaux sous le dossier
JUC 原子累加器 源码之 LongAdder
Use of grep
20211028 adjustment and tracking
Tutorial (5.0) 01 Product introduction and installation * fortiedr * Fortinet network security expert NSE 5
Top+jstack to analyze the causes of excessive CPU