• 2023-11-22 LeetCode每日一题(网格中的最小路径代价)


    2023-11-22每日一题

    一、题目编号

    2304. 网格中的最小路径代价
    
    • 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:
    在这里插入图片描述

    示例 2:
    在这里插入图片描述
    提示:

    • 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

    四、解题代码

    class Solution {
    public:
        int minPathCost(vector<vector<int>>& grid, vector<vector<int>>& moveCost) {
            int m = grid.size(), n = grid[0].size();
            vector<vector<int>> memo(m, vector<int>(n, -1));
            function<int(int, int)> dfs = [&](int i, int j) -> int {
                if (i == 0) {
                    return grid[i][j];
                }
                if (memo[i][j] >= 0) {
                    return memo[i][j];
                }
                int res = INT_MAX;
                for (int k = 0; k < n; k++) {
                    res = min(res, dfs(i - 1, k) + moveCost[grid[i - 1][k]][j] + grid[i][j]);
                }
                memo[i][j] = res;
                return res;
            };
            int res = INT_MAX;
            for (int j = 0; j < n; j++) {
                res = min(res, dfs(m - 1, j));
            }
            return res;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    五、解题思路

    (1) 记忆化搜索。

  • 相关阅读:
    Word论文排版教程
    SwiftUI接入穿山甲开屏广告
    String&StringBuilder&StringBuffer
    微信小程序二维码
    HTML爱心特效代码
    【校招VIP】【约起来】高校大学生自己的商业项目|产品脑图的重要性:活动模型的细节
    系统设计 system design 干货笔记
    【JavaEE进阶序列 | 从小白到工程师】String类常用的成员方法,一文直接上手使用
    RabbitMQ——02
    浏览器中的页面循环系统(三)async await使用同步方式写异步代码
  • 原文地址:https://blog.csdn.net/qq_56086076/article/details/134558865