1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| class Solution { public: int mincostTickets(vector<int>& days, vector<int>& costs) { n = days.size(); cost.resize(n); vector<int> passes = {1, 7, 30}; return mincost(0, days, 0, passes, costs); }
int mincost(int lastDay, const vector<int> &days, int nextIdx, const vector<int> &passes, const vector<int> &costs) { if (nextIdx >= n) return 0; if (days[nextIdx] <= lastDay) return mincost(lastDay, days, nextIdx + 1, passes, costs); if (cost[nextIdx] > 0) return cost[nextIdx]; int res = INT_MAX; for (int i = 0; i < 3; ++i) { res = min(res, mincost(days[nextIdx] + passes[i] - 1, days, nextIdx + 1, passes, costs) + costs[i]); } return cost[nextIdx] = res; }
int n; vector<int> cost; };
|