赞
踩
// dp[i] 表示第i天的最少费用,如果这天不再计划中,那么dp[i] = dp[i-1],否则 dp[i] = min(dp[i-1]+cost[0], dp[i-7]+cost[1], dp[i-30]+cost[2]),这里为了处理越界,用max(0,i-30)处理即可。
- class Solution {
- public:
- int mincostTickets(vector<int>& days, vector<int>& costs) {
- // dp[i] 表示第i天旅行的最少费用。
- unordered_set<int> travelDays;
- for(auto day:days){
- travelDays.insert(day);
- }
- int lastDay = days.back();
- vector<int> dp(lastDay+1);
- for(int i=1;i<=lastDay;i++){
- if(!travelDays.count(i)){
- dp[i] = dp[i-1];
- }else{
- dp[i] = min(dp[max(0,i-1)]+costs[0],min(dp[max(0,i-7)]+costs[1],dp[max(0,i-30)]+costs[2]));
- }
- }
- return dp[lastDay];
- }
- };

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。