public class Solution
    {
        public int MincostTickets(int[] days, int[] costs)
        {
            int weeklyStart = 0;
            int monthlyStart = 0;
            int[] dp = new int[days.Length + 1];
            dp[0] = 0;

            for (int i = 1; i <= days.Length; i++)
            {
                // day pass
                dp[i] = dp[i - 1] + costs[0];

                // update best weekly pass start date
                while (days[i - 1] - days[weeklyStart] >= 7) weeklyStart++;

                // update best monthly pass start date
                while (days[i - 1] - days[monthlyStart] >= 30) monthlyStart++;

                // get minimum of all 3 above
                dp[i] = Math.Min(dp[i], Math.Min(dp[weeklyStart] + costs[1], dp[monthlyStart] + costs[2]));
            }

            return dp[days.Length];
        }
    }

 

posted on 2019-01-28 18:35  Sempron2800+  阅读(249)  评论(0编辑  收藏  举报