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 };