983. 最低票价
思路:如果当前 天数我不想旅游,那么花的钱和前一天一样多。
如果我想旅游了,那么我当前的这个票是从哪一天买的呢?
有三种情况:一天前,七天前,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])
代码如下:
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]
备注:我是算法菜鸟,动态规划我也是不咋会,写的肯定是不好的,还望海涵!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。