983.最低票价
- 该题晓得需要用动态规划解决,但还是不会做。以下为大佬的解题分析
优解
思路
代码
public int mincostTickets(int[] days, int[] costs) {
int len=days.length,maxDay=days[len-1],minDay=days[0];
int[] dp=new int[maxDay+31];
//i表示days的索引
//只考虑[minDay,MaxDay],此区间外都不需要出门
for(int d=maxDay,i=len-1;d>=minDay;d--){
if(d==days[i]){
dp[d]=Math.min(dp[d+1]+costs[0],dp[d+7]+costs[1]);
dp[d]=Math.min(dp[d+30]+costs[2],dp[d]);
i--;
}else{
//不需要出门
dp[d]=dp[d+1];
}
}
return dp[minDay];
}