思路:
考虑第i天的最低票价,因为三种票分别可以作用1天、7天、30天,那么第i天的票价受到第第i-1天、第i-7天、第i-30天的影响,而且在这些天时,我们要再买一个costj,才可以作用到第i天,例如,第i-7天最低票价是f[i-7],那么再买一个cost1,才可以作用到第i天。
代码:
class Solution
{
public:
int dp[1000];
bool vis[1000];
int mincostTickets(vector<int>& days, vector<int>& costs)
{
for(int i=0; i<days.size(); i++)
vis[days[i]]=1;
//dp[1]=costs[0];
for(int i=1; i<366; i++)
{
if(!vis[i])
{
dp[i]=dp[i-1];
}
else
{
dp[i]=min(dp[i-1]+costs[0],min(dp[max(0,i-7)]+costs[1],dp[max(0,i-30)]+costs[2]));
}
}
return dp[days[days.size()-1]];
}
};