[Leetcode题解]最低票价

983. 最低票价

image.png

思路:若是当前 天数我不想旅游,那么花的钱和前一天同样多。
若是我想旅游了,那么我当前的这个票是从哪一天买的呢?
有三种状况:一天前,七天前,30天前。假设是x天前买的,那么当前最低票价就是,x天前买票前的花费,假设买的这个票的花费。选择最低的那个算法

dp[x] = dp[x-1] # 不想旅游
dp[x] = min(dp[day-1]+costs[0],dp[day-7]+costs[1],dp[day-30]+costs[2])

代码以下:spa

class Solution(object):
    def mincostTickets(self, days, costs):
        last_day,days = days[-1],set(days)
        dp = [0 for _ in range(366)]+[0]*30 # 第i天所须要的最小费用
        for day in range(1,366):
            dp[day] = dp[day-1] if day not in days else min(dp[day-1]+costs[0],dp[day-7]+costs[1],dp[day-30]+costs[2])
        return dp[last_day]

备注:我是算法菜鸟,动态规划我也是不咋会,写的确定是很差的,还望海涵!code

相关文章
相关标签/搜索