在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 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

思路:动态规划

dp[i] = Math.min(Math.min(dp[Math.max(0,i-1)]+costs[0],dp[Math.max(0,i-7)]+costs[1])

,dp[Math.max(0,i-30)]+costs[2]);

代码:

class Solution {

public int mincostTickets(int[] days, int[] costs) {

int dp[] = new int[366];

if(days.length==0){

return 0;

}

dp[0] = 0;

int index=0;

for(int i=1;i<=365;i++){

if(index==days.length){

break;

}

if(days[index]!=i){  //如果这天不旅行,那花费和前一天一样

dp[i] = dp[i-1];

continue;

}

index++;

dp[i] = Math.min(Math.min(dp[Math.max(0,i-1)]+costs[0],dp[Math.max(0,i-7)]+costs[1])

,dp[Math.max(0,i-30)]+costs[2]);

}

return dp[days[days.length-1]];

}

}

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

  1. leetcode - 983. 最低票价

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

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

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

  3. Leetcode 983.最低票价

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

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

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

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

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

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

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

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

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

  8. 20200506:最低票价(leetcode983)

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

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

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

  10. LeetCode 871. 最低加油次数

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

最新文章

  1. 常见的面试题(整理)
  2. CentOS 7下的MariaDB Master-Slave Replication配置
  3. 从Dart列表中删除重复项的2种方法
  4. PHP的ob多级缓冲设置
  5. python基础函数式编程(十七)
  6. vue-router vue路由
  7. bootstrap-pagination demo
  8. bzoj 1052: [HAOI2007]覆盖问题(二分+贪心)
  9. python绘制曲线y=2x+5_使用python动态生成波形曲线的实现
  10. Oracle之触发器
  11. Winform中自定义xml配置文件后对节点进行读取与写入(XmlDocument)
  12. 利用Python下载文件
  13. MATLAB数据拟合(附代码)
  14. python 中文乱码问题深入分析
  15. 王佩丰 Excel 24节课 学习笔记
  16. BFS算法和DFS算法(含图解:简单易懂)
  17. 使用 teredo 穿透NAT访问 ipv6
  18. 闲鱼服务端架构演进历程
  19. Unity3D游戏制作学习记录03——丛林战争
  20. sql增加数据的几种方法

热门文章

  1. java8 util.time_Java8 java.util.Date转换为java.time.ZonedDateTime
  2. Java可靠性测试fit_Java ParagraphVectors.fit方法代码示例
  3. 进度条上的小圆点怎么做_傲视网:【AE教程】如何制作环形进度条(第一讲)...
  4. html5 职工入职后台管理系统_ChemCMS是一款基于GO+PHP+MYSQL+HTML5构建的化学内容管理系统
  5. php必须汉字,php怎么只保留汉字
  6. 7.MongoDB与python交互
  7. Spark资源调度分配
  8. 根因分析初探:一种报警聚类算法在业务系统的落地实施 1
  9. requirements.txt一键安装项目所需要的的python包
  10. Webpack构建性能优化指南