class Solution { public: int mincostTickets(vector<int>& days, vector<int>& costs) { vector<int> dp(366, 0); int k = 0;//访问days[] int tar;//储存一年中最后的出行日期,提前结束循环 for(int i = 1; i <= 365; i++) { if(days[k] != i) { dp[i] = dp[i-1];//如果这一天不出行,则值与前一天相同 continue; } k++;//否则往后执行,下一次循环访问days[]的下一个元素 if(i < 7)//状态转移 { dp[i] = min(dp[i-1] + costs[0],costs[1]); } else if(i<30) { dp[i] = min(dp[i-1] + costs[0],dp[i - 7] +costs[1]); dp[i] = min(dp[i], costs[2]); } else { dp[i] = min(dp[i-1] + costs[0],dp[i - 7] +costs[1]); dp[i] = min(dp[i], dp[i-30] +costs[2]); } if(k == days.size()) //访问到边界后跳出循环 { tar = i; break; } } return dp[tar]; } };