Leetcode-983 Minimum Cost For Tickets(最低票价)

 1 #define _for(i,a,b) for(int i = (a);i < (b);i ++)
 2 
 3 class Solution
 4 {
 5     public:
 6         void initdp(int *dp,int d)
 7         {
 8             _for(i,0,d+1)
 9                 dp[i] = INT_MAX;
10         }
11         int mincostTickets(vector<int>& days, vector<int>& costs)
12         {
13             int sz = days.size();
14             int dp[sz+2];
15             initdp(dp,sz+2);
16             
17             int prev = 0;
18             for(int i = 0;i < sz;i ++)
19             {
20                 if(prev+costs[0]<dp[i])
21                     dp[i] = prev+costs[0];
22                 int j;
23                 for(j = i;j<sz&&days[j]<days[i]+7;j ++)
24                     if(prev+costs[1]<dp[j])
25                         dp[j] = prev+costs[1];
26                 for(;j<sz&&days[j]<days[i]+30;j ++)
27                     if(prev+costs[2]<dp[j])
28                         dp[j] = prev+costs[2];
29                 prev = dp[i];
30             }
31             return dp[sz-1];
32         }
33 };

猜你喜欢

转载自www.cnblogs.com/Asurudo/p/10354394.html