3
int f(int i, int j, vector<int> &days, vector<int> &costs, vector<vector<int>> &dp) {4
if (i == days.size()) return 0;5
if (days[i] < j) return f(i + 1, j, days, costs, dp);6
if (dp[i][j] != -1) return dp[i][j];7
int x = costs[0] + f(i + 1, days[i] + 1, days, costs, dp);8
int y = costs[1] + f(i + 1, days[i] + 7, days, costs, dp);9
int z = costs[2] + f(i + 1, days[i] + 30, days, costs, dp);10
return dp[i][j] = min(x, min(y, z));12
int mincostTickets(vector<int> &days, vector<int> &costs) {13
vector<vector<int>> dp(days.size(), vector<int>(days[days.size() - 1] + 1, -1));14
return f(0, 1, days, costs, dp);