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 }
  • 相关阅读:
    用外部表的方式查询当天数据库alert日志文件
    比较数据泵和exp/imp对相同数据导出/导入的性能差异
    理解Oracle TM和TX锁
    Rocky4.2下安装金仓v7数据库(KingbaseES)
    理解listagg函数
    sql*loader的直接加载方式和传统加载方式的性能差异
    Rocky4.2下安装达梦(DM)6数据库
    演示对sys用户和普通用户进行审计的示例
    演示一个通过触发器进行审计的示例
    演示一个使用db vault进行安全控制的示例
  • 原文地址:https://www.cnblogs.com/strengthen/p/10326127.html
Copyright © 2011-2022 走看看