983. 最低票价

在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
————————————
解题思路:
如果 : 第i天没旅行,第i天的最小钱数 = 第i-1天的最小钱数
否则 : 第i天的最小钱数 = min ( 第i-1天的最小钱数+1天票钱costs[0] , 第i-7天的最小钱数+7天票钱costs[1] ,第i-30天的最小钱数+30天票钱costs[2])
其中如果 i-1,i-7,i-30<0 那天的最小钱数就为0

作者:D_dong
链接:https://leetcode-cn.com/problems/minimum-cost-for-tickets/solution/cdong-tai-gui-hua-by-d_dong/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
————————————
解题C++代码:

class Solution {public:int mincostTickets(vector<int>& days, vector<int>& costs) {int length = days.size();vector<int> dp(366);for(int i=0;i<length;i++)  //将days的值在dp中标记为1dp[days[i]]=1;for(int i=1;i<=365;i++){if(dp[i]==0)  //如果第i天没有旅行,则d[i]=dp[i-1]{dp[i]=dp[i-1];continue;}int one=0;int seven=0;int fift=0;if(i-30<1)fift = costs[2];elsefift = dp[i-30] + costs[2];if(i-7<1)seven = costs[1];elseseven = dp[i-7] + costs[1];if(i-1<1)one = costs[0];elseone = dp[i-1] + costs[0];dp[i] = min(fift,min(seven,one));}return dp[365];}
};

————————————
Python代码:

class Solution:def mincostTickets(self, days: List[int], costs: List[int]) -> int:num = [0 for _ in range(days[-1]+1)]time = [1,7,30]for i in range(1,days[-1]+1):if i not in days:num[i] = num[i-1]else:num[i] = num[i-1]+costs[0]for j in range(1,3):if i - time[j] >=0:num[i] = min(num[i],num[i-time[j]]+costs[j])else:num[i] = min(num[i],costs[j])# print(num)breakprint(num)return num[-1]

代码的时间复杂度为O(W),W为365,天数;空间复杂度为O(days[-1])。

leetcode - 983. 最低票价相关推荐

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

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

  2. Leetcode 983.最低票价

    Time: 20190905 Type: Medium 题目描述 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行.在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出.每一项 ...

  3. leetcode 983. Minimum Cost For Tickets | 983. 最低票价(动态规划)

    题目 https://leetcode.com/problems/minimum-cost-for-tickets/ 题解 没想出来,看了官方题解,难点在于如何列出 dp 的状态转移方程.我没想到它的 ...

  4. 365天挑战LeetCode1000题——Day 103 400题 检查二进制字符串字段 最大子序列交替和 最低票价 K 站中转内最便宜的航班

    400题,用时103天,平均3.88题/天,预计154天,也就是5个月后完成目标 1784. 检查二进制字符串字段 代码实现(模拟) class Solution {public:bool check ...

  5. [Leedcode][JAVA][第983题][最低票价][动态规划]

    [问题描述][第983题][最低票价][中等] 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行.在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出.每一项是一个从 1 到 ...

  6. 流浪地球票房43亿元 今起电影最低票价降10元

    [TechWeb]2月25日,国产科幻电影<流浪地球>累计票房突破43亿元,成为仅次<战狼2>的中国电影票房亚军,离<战狼2>的56亿票房还差13亿. <流浪 ...

  7. 20200506:最低票价(leetcode983)

    最低票价 题目 思路与算法 代码实现 复杂度分析 题目 思路与算法 本题是基础一维动态题,虽然很基础,但是还是想了很久,留下了菜的不行的泪水.dp[i]表示从当前天开始到今年结束为止旅行话费的最小支出 ...

  8. leetcode算法题--最低票价★

    原题链接:https://leetcode-cn.com/problems/minimum-cost-for-tickets/ 1.递归+记忆化 vector<int> days,cost ...

  9. LeetCode 871. 最低加油次数

    最近刷LeetCode题目的一些思路,题目信息 汽车从起点出发驶向目的地,该目的地位于出发位置东面 target 英里处. 沿途有加油站,每个 station[i] 代表一个加油站,它位于出发位置东面 ...

最新文章

  1. 服务器系统策略功能,设置服务器系统口令复杂度策略
  2. .Net Web项目安装包制作(三)补充说明
  3. rsync+shell脚本完成自动化备份
  4. Python基础教程:hashlib和hmac模块
  5. python 如何计算代码块运行(执行)时间?time() time.time() time.clock() 区别
  6. 图解Spark On Yarn cluster模式运行机制
  7. 搞嵌入式Linux,做底层还是应用?底层要掌握哪些技能?
  8. python删除数据库的数据完整代码_利用python操作小程序云数据库实现简单的增删改查...
  9. JAVAWEB入门之Servlet_体系结构
  10. 用Ghost进行备份还原
  11. 数据挖掘:探索性数据分析(EDA)(补充)
  12. Html 小插件4 百度搜索代码
  13. OpenWRT平台搭建及简单应用[转帖]+华为HG255D编译实践(20190323更新)
  14. Oracle 10g安装 (Windows平台)
  15. Cognitive Surplus 认知盈余
  16. face_alignment库获取人脸图片landmark示例
  17. 第六章 传统金融行业的区块链战略
  18. python 生成文字图案_Python|利用字母可以组成一些美丽的图形
  19. 【前端】零基础带你入门前端< 三 > —— 实现手机通讯录(微信通讯录)等
  20. 程序员晒出从毕业到工作5年照片,抱怨头发掉光了,网友:很真实

热门文章

  1. 三议(巧用:before和inline-block伪元素解决)跨浏览器不定长宽,中心为基点,百分比定位~...
  2. Windows Server 2008十大新特性
  3. TypeScript入门教程 之 for ... of 与 for ... in
  4. 深入 JavaScript 装饰器
  5. 互联网架构,究竟为什么需要配置中心?
  6. Nodejs如何自动重启
  7. Qt Installer Framework翻译(5-2)
  8. H5新增特性之语义化标签
  9. 输入身份证号,输出出生日期
  10. 【缓存】Redis入门