983.最低票价

image-20200506143225275

  • 该题晓得需要用动态规划解决,但还是不会做。以下为大佬的解题分析

优解

思路

image-20200506143508308

image-20200506143557591

image-20200506143637614



代码

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];
    }
posted @ 2020-05-06 14:43  YH_Simon  阅读(115)  评论(0编辑  收藏  举报