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