题目链接:https://leetcode-cn.com/problems/minimum-cost-for-tickets/
思路:记忆化搜索
class Solution {
public:
int bitmap[366];
int access[3]={1,7,30};
int dp[500];
int ddp(int k,vector<int>& days, vector<int>& costs)
{
if(k>365)
{
return 0;
}
if(dp[k]!=400000)
{
return dp[k];
}
if(bitmap[k]==1)
{
for(int i=0;i<3;i++)
{
dp[k]=min(dp[k],costs[i]+ddp(k+access[i],days,costs));
}
}
if(bitmap[k]==0)
{
dp[k]=ddp(k+1,days,costs);
}
return dp[k];
}
int mincostTickets(vector<int>& days, vector<int>& costs) {
for(int i=0;i<400;i++)
{
dp[i]=400000;
}
memset(bitmap,0,sizeof(bitmap));
for(int i=0;i<days.size();i++)
{
bitmap[days[i]]=1;
}
return ddp(1,days,costs);
}
};
原文:https://www.cnblogs.com/hang-shao/p/12839675.html