思路:若是当前 天数我不想旅游,那么花的钱和前一天同样多。
若是我想旅游了,那么我当前的这个票是从哪一天买的呢?
有三种状况:一天前,七天前,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