zoukankan      html  css  js  c++  java
  • [Swift]LeetCode983. 最低票价 | Minimum Cost For Tickets

    原文地址:https://www.cnblogs.com/strengthen/p/10326127.html 

    In a country popular for train travel, you have planned some train travelling one year in advance.  The days of the year that you will travel is given as an array days.  Each day is an integer from 1 to 365.

    Train tickets are sold in 3 different ways:

    • a 1-day pass is sold for costs[0] dollars;
    • a 7-day pass is sold for costs[1] dollars;
    • a 30-day pass is sold for costs[2] dollars.

    The passes allow that many days of consecutive travel.  For example, if we get a 7-day pass on day 2, then we can travel for 7 days: day 2, 3, 4, 5, 6, 7, and 8.

    Return the minimum number of dollars you need to travel every day in the given list of days

    Example 1:

    Input: days = [1,4,6,7,8,20], costs = [2,7,15]
    Output: 11
    Explanation: 
    For example, here is one way to buy passes that lets you travel your travel plan:
    On day 1, you bought a 1-day pass for costs[0] = $2, which covered day 1.
    On day 3, you bought a 7-day pass for costs[1] = $7, which covered days 3, 4, ..., 9.
    On day 20, you bought a 1-day pass for costs[0] = $2, which covered day 20.
    In total you spent $11 and covered all the days of your travel.
    

    Example 2:

    Input: days = [1,2,3,4,5,6,7,8,9,10,30,31], costs = [2,7,15]
    Output: 17
    Explanation: 
    For example, here is one way to buy passes that lets you travel your travel plan:
    On day 1, you bought a 30-day pass for costs[2] = $15 which covered days 1, 2, ..., 30.
    On day 31, you bought a 1-day pass for costs[0] = $2 which covered day 31.
    In total you spent $17 and covered all the days of your travel. 

    Note:

    1. 1 <= days.length <= 365
    2. 1 <= days[i] <= 365
    3. days is in strictly increasing order.
    4. costs.length == 3
    5. 1 <= costs[i] <= 1000

    在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 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. 1 <= days.length <= 365
    2. 1 <= days[i] <= 365
    3. days 按顺序严格递增
    4. costs.length == 3
    5. 1 <= costs[i] <= 1000

    124ms

     1 class Solution {
     2     func mincostTickets(_ days: [Int], _ costs: [Int]) -> Int {
     3         var n:Int = days.count
     4         var dp:[Int] = [Int](repeating:Int.max / 2,count:n+1)
     5         dp[0] = 0
     6         for i in 1...n
     7         {
     8             dp[i] = dp[i-1] + costs[0]
     9             for j in (0...(i - 1)).reversed()
    10             {
    11                 if days[i-1] - days[j] + 1 <= 7
    12                 {
    13                     dp[i] = min(dp[i], dp[j] + costs[1])
    14                 }
    15                 if days[i-1] - days[j] + 1 <= 30
    16                 {
    17                     dp[i] = min(dp[i], dp[j] + costs[2])
    18                 }
    19             }
    20         }
    21         return dp[n]
    22     }
    23 }
  • 相关阅读:
    一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——收流篇:(一)简介
    常用perl脚本工具
    一步步学习操作系统(2)——在STM32上实现一个可动态加载kernel的"my-boot"
    一步步学习操作系统(1)——参照ucos,在STM32上实现一个简单的多任务(“啰里啰嗦版”)
    一步步学习操作系统(1)——参照ucos,在STM32上实现一个简单的多任务(“精简版”)
    perl的正则表达式
    vim小技巧
    一些方便的bash命令
    Linux磁盘及文件系统管理
    Linux权限扩展
  • 原文地址:https://www.cnblogs.com/strengthen/p/10326127.html
Copyright © 2011-2022 走看看