动态规划实战1-leetcode 983.Minimum Cost For Tickets
前言:最简单的动态规划比如爬楼梯、斐波那契数列就不做举例分析了。我们来看一下场景相对复杂的题目。
确定状态 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相关推荐
- leetcode 983. Minimum Cost For Tickets | 983. 最低票价(动态规划)
题目 https://leetcode.com/problems/minimum-cost-for-tickets/ 题解 没想出来,看了官方题解,难点在于如何列出 dp 的状态转移方程.我没想到它的 ...
- 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 ...
- leetcode 1217. Minimum Cost to Move Chips to The Same Position | 1217. 玩筹码(Java)
题目 题解 所有的 chips,要么在奇数位置,要么在偶数位置 class Solution {public int minCostToMoveChips(int[] position) {int p ...
- 【动态规划 斐波那切数列】LeetCode 746. Min Cost Climbing Stairs
LeetCode 746. Min Cost Climbing Stairs 本博客转载自:http://www.cnblogs.com/grandyang/p/8343874.html 存在无代价的 ...
- 【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 ...
- LeetCode 746. Min Cost Climbing Stairs--动态规划--Java,C++,Python解法
题目地址:Min Cost Climbing Stairs - LeetCode LeetCode 动态规划(Dynamic programming)系列题目:LeetCode 动态规划(Dynami ...
- 【DP】LeetCode 64. Minimum Path Sum
LeetCode 64. Minimum Path Sum Solution1:标准的动态规划题目 class Solution { public:int minPathSum(vector<v ...
- LeetCode: 871. Minimum Number of Refueling Stops
LeetCode: 871. Minimum Number of Refueling Stops 题目描述 A car travels from a starting position to a de ...
- [Swift]LeetCode1135. 最低成本联通所有城市 | Connecting Cities With Minimum Cost
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
- POJ 2516 -- Minimum Cost (最小费用最大流, 必须分开建图)
题目链接 Description Dearboy, a goods victualer, now comes to a big problem, and he needs your help. In ...
最新文章
- MyBufferedReader
- c语言 求方程ax,关于求方程ax2+bx+c=0根的问题
- 数据结构--二叉树 Binary Tree
- 改进初学者的PID-初始化
- python shell怎么打开测试,python脚本第一篇,运行时间测试
- python机器学习库keras——线性回归、逻辑回归、一般逻辑回归
- 依托大数据的财务管理新路径
- java虚拟机学习笔记(五)---运行时的数据区域
- 并发 不同的隔离等级存在的问题
- 植物大战僵尸 辅助 总结
- 2015年9月29笔试总结
- 44186818 mipi屏的艰难之旅
- 怎样设置一个函数C语言,C语言中怎样编写一个函数 如何在C语言中定义一个函数?...
- 机器学习-*-K均值聚类及代码实现
- blender2.8 使用教程 贴图纹理快捷键等。
- 什么是Ninja -
- git 配置ssh 秘钥
- python爬虫chinaplay网页的前十个游戏 游戏名字、原价、现价、折扣、爬下来输出到excel文件
- NDK 开发之 ndk-build 的使用
- 华为nova8 se和荣耀30S哪个好