1928.规定时间内到达终点的最小话费,题解

news/2024/11/16 17:49:45/文章来源:https://www.cnblogs.com/spp20/p/18415548

1928. 规定时间内到达终点的最小花费 - 力扣(LeetCode)

有点难,参考官方题解代码:

利用了动态规划思想,逐步计算从起点到各个城市在不同时间下的最小费用。

 1.代码解释,涉及,static关键字,constexpr关键字,INT_MAX除以2赋值的含义

static constexpr int INFTY = INT_MAX / 2;

 1. **`static` 关键字**:
- **`static`** 表示这个变量具有**静态存储周期**,意味着它只在内存中存储一份,并且生命周期从程序开始到程序结束。它也意味着该变量的作用域限制在声明它的类或文件中,不会被外部直接访问。通常用在类或函数内部,或者在全局作用域中限制变量的可见性。

 2. **`constexpr` 关键字**:
- **`constexpr`** 表示这是一个**常量表达式**,在编译时就能确定它的值。与 `const` 类似,但它更严格,要求编译器在编译时对表达式求值。换句话说,`constexpr` 变量必须能够在编译阶段被计算出其值。

 3. **`int INFTY`**:
- **`INFTY`** 是定义的一个整数常量,表示无穷大。这个常量是整型(`int`),并且通过 `static constexpr` 限定,它的值在编译时确定,并且在类或文件的整个生命周期内都有效。

 4. **`INT_MAX / 2`**:
- **`INT_MAX`** 是在 `climits` 头文件中定义的一个宏,表示 **int 类型能够表示的最大值**,通常是 `2,147,483,647`(对于 32 位的 `int` 类型)。
- 使用 `INT_MAX / 2` 而不是 `INT_MAX` 的原因是为了防止在执行某些算法时,防止数值溢出。很多时候我们在图算法或者动态规划中使用 "无穷大" 来表示不可达的节点或状态。如果直接使用 `INT_MAX`,在计算时(比如加权图中更新路径长度时)可能会导致数值溢出(因为超过了 `INT_MAX` 的范围)。而使用 `INT_MAX / 2` 可以让值足够大,但避免溢出的风险

总结:
这行代码定义了一个 **`INFTY`** 常量,表示一个**非常大的值**(接近于 `INT_MAX`,但小一半),用于表示类似“无穷大”的含义,常见于**图算法**(如 Dijkstra 最短路径)或者动态规划中,作为初始化的最大值。它使用了 `static constexpr`,所以它的值是在编译时就确定的,且在整个程序生命周期中只会存在一份。

2.

vector<vector<int>> f(maxTime + 1, vector<int>(n, INFTY));

这一行代码的作用是定义一个二维动态数组 `f`,其中 `f[t][i]` 表示在使用了 `t` 时间时,能够到达城市 `i` 的最小费用。详细解释如下:

 1. **定义二维数组 `f`**:

- `f` 是一个大小为 `(maxTime + 1) x n` 的二维数组。
- 第一维:时间,从 `0` 到 `maxTime`,共 `maxTime + 1` 行,表示可以使用的时间。
- 第二维:城市,从 `0` 到 `n-1`,表示共有 `n` 个城市。

 2. **`vector<int>(n, INFTY)`**:
- 这一部分表示创建一个长度为 `n` 的一维数组,每个元素都初始化为 `INFTY`。
- `n` 是城市的数量。
- `INFTY` 是一个表示“无穷大”的值,表示无法在当前状态下到达某个城市。
- 也就是一开始所有城市的通行费用都设置为一个极大值(表示不可能到达)。

 3. **构建二维数组**:
- `vector<vector<int>> f(maxTime + 1, ...)`:创建 `maxTime + 1` 行,每一行是一个长度为 `n` 的数组,每个元素初始为 `INFTY`。
- 因此,`f` 是一个二维数组,表示在不同时间下到达不同城市的最小通行费用。每个城市在每个时间点的初始状态都是不可达(`INFTY`)。

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件技术基础的第一次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/rjjc这个作业的目标 向教师和助教介绍自己,并熟悉博客园 对课程的期望姓名 颜宇航学号 20223293011251.个人介绍 大家好,我是22自动化2班的颜宇航,来自浙江台州。很高兴能够在这里与大家分享自己的生活!我是一个…

帝国cms密码忘记,帝国cms网站忘记登陆账号密码

如果你忘记了帝国CMS的管理员账号和密码,可以通过以下几种方法来找回或重置密码: 1. 通过数据库直接修改密码 如果你对数据库操作比较熟悉,可以采用此方法:登录数据库管理工具:使用phpMyAdmin或其他数据库管理工具登录到你的数据库。 找到管理员表:在数据库中找到存储管理…

Ubuntu Server 24.04 LTS 安装记事

Ubuntu Server 24.04 LTS,代号 Noble Numbat,于 2024 年 4 月 25 日正式发布,该发布版可以支持长达12年。 曾经接触Ubuntu的时候,还是它的第一个版本,但是那个时候网络太局限了,关于这个系统的书籍也很少,所以就一直没有使用起来。 有时候好像什么事情都得有个名头,就像…

帝国cms密码忘记,帝国cms忘记登陆账号密码

如果你忘记了帝国CMS的管理员账号和密码,可以通过以下几种方法来找回或重置密码: 1. 通过数据库直接修改密码 如果你对数据库操作比较熟悉,可以采用此方法:登录数据库管理工具:使用phpMyAdmin或其他数据库管理工具登录到你的数据库。 找到管理员表:在数据库中找到存储管理…

1张超级“支付清算架构”图

在支付行业的快速发展中,理解和掌握支付清算架构对于从业人员来说至关重要。本文将通过一张精心绘制的“超级支付清算架构图”,带领读者深入探索支付生态的全貌。这张图不仅包含了丰富的支付组织、系统建设和账户基础等信息,而且通过高维度抽象,展示了它们之间复杂的交互关…

迅睿cms后台密码忘记了,如何重置找回密码

如果你忘记了迅睿CMS的后台密码,可以通过以下几种方法来重置或找回密码: 1. 通过邮箱找回密码 如果迅睿CMS支持通过邮箱找回密码,并且你在注册时提供了有效的邮箱地址,你可以尝试以下步骤:访问登录页面:前往迅睿CMS的后台登录页面。 点击“忘记密码”:在登录页面上寻找“…

DedeCMS系统管理员帐号密码忘记了怎么办

如果你忘记了DedeCMS(织梦内容管理系统)的管理员账号密码,可以通过以下几种方法来找回或重置密码: 1. 通过数据库直接修改密码登录数据库管理工具:使用phpMyAdmin或其他数据库管理工具登录到你的数据库。 找到管理员表:在数据库中找到存储管理员信息的表。对于DedeCMS来说…

利用未标记数据的半监督学习在模型训练中的效果评估

数据科学家在实践中经常面临的一个关键挑战是缺乏足够的标记数据来训练可靠且准确的模型。标记数据对于监督学习任务(如分类或回归)至关重要。但是在许多领域,获取标记数据往往成本高昂、耗时或不切实际。相比之下,未标记数据通常较易获取,但无法直接用于模型训练。 如何利…

如何利用帝国CMS搭建多个网站?

使用帝国CMS搭建多个网站可以通过多站点功能来实现。帝国CMS支持在一个主系统中管理多个独立的网站,这种方式不仅节省了服务器资源,还便于集中管理。以下是使用帝国CMS搭建多个网站的步骤: 1. 安装帝国CMS主系统下载安装包:从帝国CMS官方网站下载最新版本的安装包。 上传文…

mysql数据怎么导入到帝国cms

将MySQL数据导入到帝国CMS中通常有两种情况:一种是从现有的MySQL数据库导入数据到帝国CMS的新建数据库中,另一种是从帝国CMS的备份文件恢复数据到现有的帝国CMS数据库中。以下是针对这两种情况的具体步骤: 从现有MySQL数据库导入数据到帝国CMS 方法一:手动迁移数据导出现有…

如何找到并打开帝国CMS的数据库文件?

通过数据库管理工具访问使用phpMyAdmin或其他数据库管理工具:登录到你的数据库管理工具,比如phpMyAdmin。 在左侧边栏中,找到你的数据库列表。 选择你用来存储帝国CMS数据的数据库。查找数据库配置文件 为了确定具体的数据库名称,你可以查找帝国CMS的数据库配置文件。对于帝…