题意
题解
贪心地考虑,只有当旅票过期时才会够买新的旅票;从 3 3 3 种票价对应的最晚旅票过期购买日加上各自的票价的最小值,即为第一个旅行日期到当前日期所需的最小花费。
class Solution {
public:
int dp[366];
int duration[3] = {1, 7, 30};
int mincostTickets(vector<int>& days, vector<int>& costs) {
memset(dp, 0x3f, sizeof(dp));
dp[0] = 0;
for(int i = 0; i < days.size(); i++){
int j = i;
for(int k = 0; k < 3; k++){
while(j >= 0 && days[j] > days[i] - duration[k]) --j;
dp[i + 1] = min(dp[i + 1], dp[max(0, j + 1)] + costs[k]);
}
}
return dp[days.size()];
}
};