题目:983. 最低票价
方法一:递归,记忆化的dfs。时间复杂度0(365)
class Solution {
public:
//记忆化数组,sta[i]表示在1~i天花费的最低消费
vector<int> sta;
//集合,用于存储数组days中实际旅游的日子
unordered_set<int> st;
//参数u:第u天
int dfs(int u,vector<int>& costs){
//表示已近遍历结束
if(u<=0) return 0;
//表明之前已经遍历过
if(sta[u]!=-1) return sta[u];
//表示当天不在days里
if(!st.count(u)) return dfs(u-1,costs);
//找到最低消费
return sta[u]=min(dfs(u-1,costs)+costs[0],min(dfs(u-7,costs)+costs[1],dfs(u-30,costs)+costs[2]));
}
int mincostTickets(vector<int>& days, vector<int>& costs) {
//初始化为-1
sta=vector<int>(days.back()+1,-1)