LeetCode 983. 最低票价(动态规划)

1. 题目

在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。
在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出。
每一项是一个从 1 到 365 的整数。

火车票有三种不同的销售方式:

一张为期一天的通行证售价为 costs[0] 美元;
一张为期七天的通行证售价为 costs[1] 美元;
一张为期三十天的通行证售价为 costs[2] 美元。

通行证允许数天无限制的旅行。
例如,如果我们在第 2 天获得一张为期 7 天的通行证,
那么我们可以连着旅行 7 天:第 2 天、第 3 天、第 4 天、第 5 天、第 6 天、第 7 天和第 8 天。

返回你想要完成在给定的列表 days 中列出的每一天的旅行所需要的最低消费

示例 1:
输入:days = [1,4,6,7,8,20], costs = [2,7,15]
输出:11
解释: 
例如,这里有一种购买通行证的方法,可以让你完成你的旅行计划:
在第 1 天,你花了 costs[0] = $2 买了一张为期 1 天的通行证,它将在第 1 天生效。
在第 3 天,你花了 costs[1] = $7 买了一张为期 7 天的通行证,它将在第 3, 4, ..., 9 天生效。
在第 20 天,你花了 costs[0] = $2 买了一张为期 1 天的通行证,它将在第 20 天生效。
你总共花了 $11,并完成了你计划的每一天旅行。示例 2:
输入:days = [1,2,3,4,5,6,7,8,9,10,30,31], costs = [2,7,15]
输出:17
解释:
例如,这里有一种购买通行证的方法,可以让你完成你的旅行计划: 
在第 1 天,你花了 costs[2] = $15 买了一张为期 30 天的通行证,它将在第 1, 2, ..., 30 天生效。
在第 31 天,你花了 costs[0] = $2 买了一张为期 1 天的通行证,它将在第 31 天生效。 
你总共花了 $17,并完成了你计划的每一天旅行。提示:
1 <= days.length <= 365
1 <= days[i] <= 365
days 按顺序严格递增
costs.length == 3
1 <= costs[i] <= 1000

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-cost-for-tickets
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • dp[i] 表示第 i 天花的最少的钱
  • 上一次花的钱是 dp[days[i-1]],3种票的选择costs[k],后面相应的天数的总的花费为dp[days[i-1]]+costs[k],同一天的不同花费取 min
class Solution {
public:int mincostTickets(vector<int>& days, vector<int>& costs) {vector<int> dp(366,INT_MAX);//dp[i]表示第i天花的最少的钱int d[3] = {1,7,30};//票的有效期int i, j, k, n = days.size();for(i = 0; i < 3; ++i)//初始化,第一天的选择,3种选择for(j = days[0]; j < min(366,days[0]+d[i]); ++j){	//后面的天都不用再花钱,重叠的时间,取最小的花费dp[j] = min(dp[j], costs[i]);}for(i = 1; i < n; ++i){	//遍历从第2天开始的其余的天for(k = 0; k < 3; ++k)//三种票选择for(j = days[i]; j < min(366,days[i]+d[k]); ++j){	//上一次花的钱是 dp[days[i-1]],这次花的钱costs[k]dp[j] = min(dp[j], dp[days[i-1]]+costs[k]);}}return dp[days[n-1]];//最后一次的最小花费}
};
  • 以后出去玩耍,可以先动态规划一下!哈哈😁😁😁
    在这里插入图片描述

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

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

相关文章

final 数组 java_Java Final数组列表

您是正确的声明列表最终意味着您无法将列表变量重新分配给另一个对象.另一个问题(我想)是public class SomeClass {private static final ArrayList list new ArrayList();}VSpublic class SomeClass {ArrayList list new ArrayList();}我们轮流使用每个修饰符.private只有这…

生活点滴语录

1、gmail与chrome&#xff0c;高效实用&#xff0c;简单大方。生活中用到的两款google产品&#xff0c;确实喜欢。2、g.cn&#xff0c;值得信任。-------简洁明了&#xff0c;深入人心。3、深度&#xff0c;值得深入。-------精髓的解说。4、有人说态度决定一切&#xff0c;有人…

LeetCode 1306. 跳跃游戏 III(广度优先搜索BFS)

1. 题目 这里有一个非负整数数组 arr&#xff0c;你最开始位于该数组的起始下标 start 处。 当你位于下标 i 处时&#xff0c;你可以跳到 i arr[i] 或者 i - arr[i]。 请你判断自己是否能够跳到对应元素值为 0 的 任意 下标处。 注意&#xff0c;不管是什么情况下&#xff…

mysql错误日志为aborting_MySQL 错误日志(Error Log)

同大多数关系型数据库一样&#xff0c;日志文件是MySQL数据库的重要组成部分。MySQL有几种不同的日志文件。通常包括错误日志文件&#xff0c;二进制日志&#xff0c;通用日志&#xff0c;慢查询日志&#xff0c;等等。这些日志能够帮助我们定位mysqld内部发生的事件&#xff0…

this和arguments

this是面向对象语言中的一个重要概念&#xff0c;在JAVA,C#等大型语言中&#xff0c;this固定指向运行时的当前对象。但是在javascript中&#xff0c;由于javascript的动态性&#xff08;解释执行&#xff0c;当然也有简单的预编译过程&#xff09;&#xff0c;this的指向在运行…

LeetCode 529. 扫雷游戏(广度优先搜索BFS/深度优先搜索DFS)

文章目录1. 题目2. 解题2.1 BFS2.2 DFS1. 题目 让我们一起来玩扫雷游戏&#xff01; 给定一个代表游戏板的二维字符矩阵。 ‘M’ 代表一个未挖出的地雷&#xff0c; ‘E’ 代表一个未挖出的空方块&#xff0c; ‘B’ 代表没有相邻&#xff08;上&#xff0c;下&#xff0c;左…

java 使用jar_Java 使用JAR文件

JAR&#xff0c;Java Archive File&#xff0c;Java档案文件。JAR文件是一种压缩文件&#xff0c;与ZIP压缩文件兼容&#xff0c;通常称为JAR包。JAR文件中默认包含了一个名为META-INF/MANIFEST.MF的清单文件&#xff0c;是在生成JAR文件时由系统自动创建的。使用JAR文件与以下…

Flash 与数学:圆的切线(3)

在上面几节当中&#xff0c;已经了解过计算圆上任意一点的切线的方法&#xff0c;我们首先知道使用导数几何意义在哪里&#xff1f;在我们高中数学和大学的数学当中&#xff0c;说明了。导数的几何意义函数yf&#xff08;x&#xff09;在点x0处导数为f(x0)在几何上表示曲线yf&a…

LeetCode 1110. 删点成林(二叉树递归)

1. 题目 给出二叉树的根节点 root&#xff0c;树上每个节点都有一个不同的值。 如果节点值在 to_delete 中出现&#xff0c;我们就把该节点从树上删去&#xff0c;最后得到一个森林&#xff08;一些不相交的树构成的集合&#xff09;。 返回森林中的每棵树。你可以按任意顺序…

Asp.net 编码函数

属于Server类 HtmlEncode UrlEncode转载于:https://www.cnblogs.com/hahacjh/archive/2010/06/21/1761822.html

LeetCode 973. 最接近原点的 K 个点(排序/优先队列/快排)

文章目录1. 题目2. 解题2.1 排序2.2 优先队列2.3 快排思路1. 题目 我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。 &#xff08;这里&#xff0c;平面上两点之间的距离是欧几里德距离。&#xff09; 你可以按任何顺序返回答案。除了…

创建链表

代码#include <iostream>usingnamespacestd;structstudent //定义结构体{ intdata; student *next;};//创建链表student *CreateList(){ student *headNULL; student *pnewstudent; cin>>p->data; student *endp; while(p->data!0…

LeetCode 1286. 字母组合迭代器(回溯/位运算)

文章目录1. 题目2. 解题2.1 回溯2.2 位运算1. 题目 请你设计一个迭代器类&#xff0c;包括以下内容&#xff1a; 一个构造函数&#xff0c;输入参数包括&#xff1a;一个 有序且字符唯一 的字符串 characters&#xff08;该字符串只包含小写英文字母&#xff09;和一个数字 c…

[Ubuntu]Apt-get命令参数详解

常用的APT命令参数&#xff1a;apt-cache search package 搜索包apt-cache show package 获取包的相关信息&#xff0c;如说明、大小、版本等sudo apt-get install package 安装包sudo apt-get install package - - reinstall 重新安装包sudo apt-get -f install 修复安装"…

java 密码 md5_java怎么去判断md5加密的密码啊?

对两次的加密字符进行比较&#xff0c;MD5加密的结果是一样的&#xff0c;所以每次进行加密后的密文进行匹配比较。java代码加密import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class MD5Utils {public static void main(String[] …

PageRank 算法

文章目录1. PageRank 的定义1.1 基本想法1.2 PageRank 的基本定义1.3 PageRank 的一般定义2. PageRank 的计算2.1 迭代算法2.2 幂法2.3 代数算法PageRank算法是图的链接分析&#xff08;link analysis&#xff09;的代表性算法&#xff0c;属于图数据上的无监督学习方法。 Pag…

基于Java+SpringMvc+Vue求职招聘系统详细设计实现

基于JavaSpringMvcVue求职招聘系统详细设计实现 &#x1f345; 作者主页 专业程序开发 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; 文章目录 基于JavaSpringMvcVue求职招聘系统详细设计实现一、前言介…

NameValueCollection详解

1.NameValueCollection类集合是基于 NameObjectCollectionBase 类。 但与 NameObjectCollectionBase 不同&#xff0c;该类在一个键下存储多个字符串值&#xff08;就是键相同&#xff0c;值就连接起来如下例子&#xff09;。该类可用于标头、查询字符串和窗体数据。每个元素都…

一名英格兰球迷眼里的本届英格兰队

英格兰的世界杯旅程昨晚被德国终结了。身为一个英格兰的球迷的确心里不好受。比赛中兰帕德的本来可以扳平比 分的一粒进球被判无效&#xff08;难道真的“兰怕德”了&#xff1f;&#xff09;&#xff0c; 是整场比赛最大的争议点。有些人认为此球误判导致英格兰的最后大比分失…

无监督学习方法总结

文章目录1. 无监督学习方法的关系和特点1.1 各种方法之间的关系1.2 无监督学习方法1.3 基础机器学习方法1. 无监督学习方法的关系和特点 八种常用的统计机器学习方法&#xff1a; 聚类方法&#xff08;层次聚类、k均值聚类&#xff09;奇异值分解&#xff08;SVD&#xff09;…