LeetCode:2304. 网格中的最小路径代价(C++)

目录

2304. 网格中的最小路径代价

题目描述:

实现代码:

dp(dp有很多相似的经典题目,比较简单,不再给出解析)


2304. 网格中的最小路径代价

题目描述:

        给你一个下标从 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

实现代码:

dp(dp有很多相似的经典题目,比较简单,不再给出解析)

class Solution {
public:
    int minPathCost(vector<vector<int>>& grid, vector<vector<int>>& moveCost) {
        int m = grid.size(), n = grid[0].size();

        vector<vector<int>> f(m, vector<int>(n, 0x3f3f3f3f));

        for (int i = 0; i < n; i++) f[0][i] = grid[0][i]; // 初始化

        for (int i = 1; i < m; i++) {
            for (int j = 0; j < n; j++) {
                for (int k = 0; k < n; k++) {
                    f[i][j] = min(f[i][j], f[i - 1][k] + moveCost[grid[i - 1][k]][j] + grid[i][j]);
                }
            }
        }

        int res = 0x3f3f3f3f;
        for (int i = 0; i < n; i++) {
            res = min(res, f[m - 1][i]);
        }

        return res;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/176142.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

中国信息通信研究院发布《中国金融科技生态白皮书》(2023)

加gzh“大数据食铁兽”&#xff0c;回复“20231122”&#xff0c;获取材料完整版 导读 本白皮书是中国信息通信研究院连续第六年针对金融科技领域的跟踪研究成果&#xff0c;聚焦过去一年来国内外金融科技领域新的发展情况&#xff0c;重点分析了中国金融科技产业、技术、市…

vue3组件化开发页面之渲染函数实现

文章目录 前言一、渲染机制虚拟 DOM渲染管线 二、渲染函数基本用法声明渲染函数Vnodes 必须唯一 三、页面使用渲染函数及组件配置总结如有启发&#xff0c;可点赞收藏哟~ 前言 组件化开发是目前开发的常态 本文记录页面拆分多个不同组件模块&#xff0c;然后再基于渲染函数实现…

智能交通收费RFID读写器在不停车收费(ETC)系统中的应用

随着公路收费规模的不断扩大&#xff0c;传统的人工收费效率低下&#xff0c;收费没有监督&#xff0c;导致票款流失严重甚至还有车辆非法逃票。为了解决这些问题&#xff0c;引入了RFID等多种技术的新型的收费系统-不停车收费(ETC)系统应运而生。 电子不停车收费系统(ETC)系统…

PMP考试

一、关于准考信下载 为确保您顺利进入考场参加xxx月份考试&#xff0c;请及时登录本网站个人系统下载并打印准考信&#xff0c;准考信下载时间为xxx-xxx。如通过以上方式无法查找准考信&#xff0c;请您及时拨打所在考点老师联系电话&#xff0c;如有特殊问题&#xff0c;请发…

VUE+element可以为空不为空时只能为(正整数和0)的验证

rule{ 变量: [ { required: true, validator: validateparamPosition, trigger: blur }] } ​​​​​​​ ​​​​​​​ ​​​​​​​ var validateparamPosition (rule, value, callback) > { if (!value) { //先判断空可以过 ca…

VirtualBox+Vagrant安装虚拟机

文章目录 一、下载Virtualbox和Vagrant1、下载2、安装 二、安装虚拟机1、新建目录D:\VirtualMachine2、执行vagrant init centos/7命令&#xff0c;就会在该目录下创建Vagrantfile文件3、执行vagrant up命令4、查看当前主机分给虚拟机的网关网段5、找到D:\VirtualMachine下的Va…

涉密人员离职怎么做好安全管理?

在信息安全领域&#xff0c;涉密人员的离职安全管理具有极其重要的意义。一旦涉密人员离职&#xff0c;可能会对单位的信息安全造成威胁&#xff0c;因此必须采取有效的措施来确保涉密人员离职后的信息安全。 一、涉密人员离职安全管理的现状 目前&#xff0c;许多单位在涉密人…

从零开始安装并运行YOLOv5

从零开始安装并运行YOLOv5 该文主要实现用YOLOv5的基准检测为自己的视频片段渲染对象检测结果和边界框&#xff0c;本文大部分都是实操&#xff0c;帮助大家快速上手。 什么是YOLOv5&#xff1f; ​ yolo是一种用于对象检测的最先进的机器学习模型&#xff0c;yolo有不同的版…

Linux OpenGauss 数据库远程连接

目录 前言 1. Linux 安装 openGauss 2. Linux 安装cpolar 3. 创建openGauss主节点端口号公网地址 4. 远程连接openGauss 5. 固定连接TCP公网地址 6. 固定地址连接测试 前言 openGauss是一款开源关系型数据库管理系统&#xff0c;采用木兰宽松许可证v2发行。openGauss内核…

Jenkins 配置节点交换内存

查看交换内存 free -hswapon -s创建swap文件 dd if/dev/zero of/mnt/swap bs1M count1024启用交换文件 设置权限 chmod 600 /mnt/swap设置为交换空间 mkswap /mnt/swap启用交换 swapon /mnt/swap设置用户组 chown root:root /mnt/swap查看 swapon -s重启系统也能生效还需要修…

Vue中的$nextTick

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue中的$nextTick 目录 &#x1f40b;Vue中的$nextTick有什么作用&#xff1f; &#x1f40b;一、…

创建用户报错:ORA-65096: 公用用户名或角色名无效

题主的Oracle版本是最新的Oracle 21 描述&#xff1a; 1、在命令行工具 给Oracle创建用户&#xff0c;create user c##用户名identifed by 密码&#xff0c;报错&#xff1a;【ORA-65096: 公用用户名或角色名无效】 2、在navicat创建用户&#xff0c;提示如下&#xff1a; 解…

(动手学习深度学习)第13章 实战kaggle竞赛:狗的品种识别

文章目录 1. 导入相关库2. 加载数据集3. 整理数据集4. 图像增广5. 读取数据6. 微调预训练模型7. 定义损失函数和评价损失函数9. 训练模型 1. 导入相关库 import os import torch import torchvision from torch import nn from d2l import torch as d2l2. 加载数据集 - 该数据…

Figma最全面的新手指南,从基础到高级,一网打尽

1 Figma界面介绍 Figma基础界面与传统设计软件没有太大区别&#xff0c;有Sketch使用经验的用户几乎可以无缝连接到Figma。 立即体验 免费的在线Figma汉化版即时设计是一款支持在线协作的专业级 UI 设计工具&#xff0c;支持 Sketch、Figma、XD 格式导入&#xff0c;海量优质设…

【计算机网络】多路复用的三种方案

文章目录 1. selectselect函数select的工作特性select的缺点 2. pollpoll函数poll与select的对比 3. epollepoll的三个接口epoll的工作原理epoll的优点LT和ET模式epoll的应用场景 &#x1f50e;Linux提供三种不同的多路转接&#xff08;又称多路复用&#xff09;的方案&#xf…

图解Spark Graphx基于connectedComponents函数实现连通图底层原理

原创/朱季谦 第一次写这么长的graphx源码解读&#xff0c;还是比较晦涩&#xff0c;有较多不足之处&#xff0c;争取改进。 一、连通图说明 连通图是指图中的任意两个顶点之间都存在路径相连而组成的一个子图。 用一个图来说明&#xff0c;例如&#xff0c;下面这个叫graph…

sklearn模型中预测值的R2_score为负数

目录 正文评论区参考链接 正文 Sklearn.metrics下面的r2_score函数用于计算R&#xff08;确定系数&#xff1a;coefficient of determination&#xff09;。它用来度量未来的样本是否可能通过模型被很好地预测。 分值为 1 表示最好&#xff0c;但我们在使用过程中&#xff0c…

数据分层:打造数据资产管家

一、引言 随着企业数据规模的增长&#xff0c;数据的价值变得越来越重要。然而&#xff0c;传统的数据库在承载大量数据时面临挑战&#xff0c;需要高效有序的维护。因此&#xff0c;建立高效的数据仓库成为了企业决策和管理的基石&#xff0c;但现代技术的背景下&#xff0c;…

HUAWEI华为MateBook X Pro 2022 12代酷睿版(MRGF-16)笔记本电脑原装出厂Windows11系统工厂模式含F10还原

链接&#xff1a;https://pan.baidu.com/s/1ZI5mR6SOgFzMljbMym7u3A?pwdl2cu 提取码&#xff1a;l2cu 华为原厂Windows11系统工厂包&#xff0c;带F10一键智能还原恢复功能。 自带指纹、面部识别、声卡、网卡、显卡、蓝牙等所有驱动、出厂主题壁纸、Office办公软件、华为…

OpenCvSharp从入门到实践-(02)图像处理的基本操作

目录 图像处理的基础操作 1、读取图像 1.1、读取当前目录下的图像 2、显示图像 2.1、Cv2.ImShow 用于显示图像。 2.2、Cv2.WaitKey方法用于等待用户按下键盘上按键的时间。 2.3、Cv2.DestroyAllWindows方法用于销毁所有正在显示图像的窗口。 2.4实例1-显示图像 2.4实例…