前言:最简单的动态规划比如爬楼梯、斐波那契数列就不做举例分析了。我们来看一下场景相对复杂的题目。

确定状态 dp[i]表示到第i天所用的最少的cost

状态转移方程(这道题不难写)

dp[i]=dp[i-1] 如果在第i天没有travel

dp[i]= min {dp[i-1]+costs[0],dp[i-7]+costs[1],dp[i-30]+costs[2]}

初始条件和边界条件

Arrays.fiil(dp,Integer.MAX_VALUE)

dp[0]=0;

我们来看下这个表达式:dp[i-30] 如果i<30说明此时我们应该从第0天就买为期30天的票,而不是dp[负数]。

状态转移方程可以修改表示为如下:

dp[i]=dp[i-1] 如果在第i天没有travel

dp[i]= min {dp[i-1]+costs[0],dp[max{i-7,0}]+costs[1],dp[max{i-30,0}]+costs[2]}

代码如下:

class Solution {public int mincostTickets(int[] days, int[] costs) {if(days==null||days.length==0)return 0;int maxday=days[days.length-1];int []dp = new int [maxday+1];int []req = new int [maxday+1];for(int i=0;i<days.length;i++){req[days[i]]=1;}Arrays.fill(dp,Integer.MAX_VALUE);dp[0]=0;for(int i=1;i<=maxday;i++){if(req[i]==0){dp[i]=dp[i-1];}else{dp[i]=Math.min(dp[i],dp[i-1]+costs[0]);dp[i]=Math.min(dp[i],dp[Math.max(i-7,0)]+costs[1]);dp[i]=Math.min(dp[i],dp[Math.max(i-30,0)]+costs[2]);}}return dp[maxday];}
}

动态规划实战1-leetcode 983.Minimum Cost For Tickets相关推荐

  1. leetcode 983. Minimum Cost For Tickets | 983. 最低票价(动态规划)

    题目 https://leetcode.com/problems/minimum-cost-for-tickets/ 题解 没想出来,看了官方题解,难点在于如何列出 dp 的状态转移方程.我没想到它的 ...

  2. Leetcode 1217. Minimum Cost to Move Chips to The Same Position [Python]

    题目好难理解,看了各位大神们的解释才懂了要求做什么.比如说[2,2,2,3,3] 的意思是[index == 2的位置上有一个chip,index == 2的位置上有一个chip,index == 2 ...

  3. leetcode 1217. Minimum Cost to Move Chips to The Same Position | 1217. 玩筹码(Java)

    题目 题解 所有的 chips,要么在奇数位置,要么在偶数位置 class Solution {public int minCostToMoveChips(int[] position) {int p ...

  4. 【动态规划 斐波那切数列】LeetCode 746. Min Cost Climbing Stairs

    LeetCode 746. Min Cost Climbing Stairs 本博客转载自:http://www.cnblogs.com/grandyang/p/8343874.html 存在无代价的 ...

  5. 【LeetCode 1000】 Minimum Cost to Merge Stones

    题目描述 There are N piles of stones arranged in a row. The i-th pile has stones[i] stones. A move consi ...

  6. LeetCode 746. Min Cost Climbing Stairs--动态规划--Java,C++,Python解法

    题目地址:Min Cost Climbing Stairs - LeetCode LeetCode 动态规划(Dynamic programming)系列题目:LeetCode 动态规划(Dynami ...

  7. 【DP】LeetCode 64. Minimum Path Sum

    LeetCode 64. Minimum Path Sum Solution1:标准的动态规划题目 class Solution { public:int minPathSum(vector<v ...

  8. LeetCode: 871. Minimum Number of Refueling Stops

    LeetCode: 871. Minimum Number of Refueling Stops 题目描述 A car travels from a starting position to a de ...

  9. [Swift]LeetCode1135. 最低成本联通所有城市 | Connecting Cities With Minimum Cost

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  10. POJ 2516 -- Minimum Cost (最小费用最大流, 必须分开建图)

    题目链接 Description Dearboy, a goods victualer, now comes to a big problem, and he needs your help. In ...

最新文章

  1. MyBufferedReader
  2. c语言 求方程ax,关于求方程ax2+bx+c=0根的问题
  3. 数据结构--二叉树 Binary Tree
  4. 改进初学者的PID-初始化
  5. python shell怎么打开测试,python脚本第一篇,运行时间测试
  6. python机器学习库keras——线性回归、逻辑回归、一般逻辑回归
  7. 依托大数据的财务管理新路径
  8. java虚拟机学习笔记(五)---运行时的数据区域
  9. 并发 不同的隔离等级存在的问题
  10. 植物大战僵尸 辅助 总结
  11. 2015年9月29笔试总结
  12. 44186818 mipi屏的艰难之旅
  13. 怎样设置一个函数C语言,C语言中怎样编写一个函数 如何在C语言中定义一个函数?...
  14. 机器学习-*-K均值聚类及代码实现
  15. blender2.8 使用教程 贴图纹理快捷键等。
  16. 什么是Ninja -
  17. git 配置ssh 秘钥
  18. python爬虫chinaplay网页的前十个游戏 游戏名字、原价、现价、折扣、爬下来输出到excel文件
  19. NDK 开发之 ndk-build 的使用
  20. 华为nova8 se和荣耀30S哪个好

热门文章

  1. ASP.NET读取XML文件
  2. 微软小冰你这么智能 .net知道吗?
  3. cocos2dx box2d使用(一)
  4. 模仿showModalDialog的总在最前
  5. springboot学习总结
  6. 《高性能javascript》随笔
  7. clock_gettime接口和linux时间系统
  8. rabbitMQ概念详细介绍
  9. CSS里 @import用法
  10. Play framework request code 413