题目分析:可以买一天票,七天票,30天票
class Solution(object): def generateParenthesis(self, days, costs): """ :type n: int :rtype: List[str] """ dp = [0]*366 j = 0 for i in range(days[0], 366): if i == days[j]: # 这一天需要旅游 dp[i] = dp[i-1]+costs[0] if i >= 7: dp[i] = min(dp[i-7]+costs[1], dp[i]) else: dp[i] = min(dp[i], costs[1]) if i >= 30: dp[i] = min(dp[i-30]+costs[2], dp[i]) else: dp[i] = min(dp[i], costs[2]) j += 1 if j == len(days): return dp[i] else: # 这一天不出去旅游 if i > 0: dp[i] = dp[i-1]
class Solution(object): def generateParenthesis(self, days, costs): """ :type n: int :rtype: List[str] """ dayset = set(days) durations = [1, 7, 30] def dp(i): if i > 365: return 0 elif i in dayset: return min(dp(i + d) + c for c, d in zip(costs, durations)) else: return dp(i + 1) return dp(1)