动态规划
动态规划经典例题
我是方小磊
这个作者很懒,什么都没留下…
展开
-
动态规划:股票买卖问题(交易两次)——08
股票买卖问题(交易两次)应该先了解买卖一次的题目动态规划:股票买卖问题(只交易一次)——07问题描述给定一个数组代表股票每天的价格,请问只能买卖两次的情况下,最大化利润是多少例如输入:{7,1,5,3,6,4}第一次交易 5 - 1 = 4 第二次交易 6 - 3 = 3最大利润为 4 + 3 = 7算法思路其实在明白了交易一次的算法实现思路之后,对于交易两次就显得比较简单了。只需要不断的将该数组进行切分,切分为两个数组,分别计算两个数组交易一次的最大价值即可。首先定义dp1原创 2020-06-10 18:20:54 · 1742 阅读 · 3 评论 -
动态规划:股票买卖问题(只交易一次)——07
股票买卖问题(只交易一次)问题描述算法思路其实这道题目思想很简单,无非就是要找到股票的最大值和最小值,并且保证最大值一定在最小值的右边动态规划思想:从最后一步来看问题设F(n)为前n天交易可获得的最大利润,price【】为输入数组当我们要求F(n)的时候,就看看和F(n-1)有没有关系,此时有两种情况M1 = price【n】 - MIN { price【0 - n-1】}M2 = F(n - 1)M1为当天价格减去前几天的最低价可获得的最大陆润M2为不算当天价原创 2020-06-05 16:57:15 · 1009 阅读 · 0 评论 -
动态规划:矩阵链相乘问题(java)——06
矩阵链相乘问题问题描述算法思路确定子问题:子问题就是减少问题规模,这道题很明显问题规模就是矩阵链的长度,也就是说在求长度为5的矩阵链的时候,可能会用到之前求长度为4,3的子问题的结果最优子结构:也就是说我们每次求的子问题,都是最优的结构这里我们设 F(i, j) 表示从Ai到Aj矩阵链的最少次数算法思路:举例说明:要求F(1,5) = A1,A2,A3,A4,A5 。我们可以先看看有多少种情况A1 |(A2,A3,A4,A5) 此时F(1,5) = F(1)(A1,A原创 2020-06-04 17:50:16 · 501 阅读 · 0 评论 -
动态规划:非0-1背包问题(java)——05
非01背包问题个人认为初学者还是先弄懂01背包,再来看非01背包,这样思路会清楚很多,动态规划:0-1背包问题(递归和非递归java实现)问题描述一个旅行者随身携带一个背包. 可以放入背包的物品有n 种, 每种物品的重量和价值分别为 wi , vi . 如果背包的最大重量限制是 b, 每种物品可以放多个. 怎样选择放入背包的物品以使得背包的价值最大 ? 不妨设上述 wi , vi , b 都是正整数.实例:n = 4, b =10(背包容量为10,物品数量为4)v1v2v3原创 2020-06-02 12:56:16 · 740 阅读 · 0 评论 -
动态规划:最长递增子序列(java)——04
最长递增子序列问题描述:给定一个序列,求解其中长度最长的递增子序列,最长递增子序列表示必须递增但是可以位置不连续的序列。例如:{4 2 3 1 5 }的最长递增子序列为 2 3 5,长度为 3 。算法概述:还是老样子,从最后一步来看是否可以用动态规划的思想去解决问题设F(n)为前n个数的最长子序列长度设我们已经求出了F(4)如何去求出F(5)呢?其实很简单,我们只需要比较num【5】和F(4)中最长子序列的尾数相比:如果num【5】大于F(4)中最长子序列的尾数,那么F(5原创 2020-05-29 13:19:09 · 754 阅读 · 0 评论 -
动态规划:0-1背包问题(递归和非递归java实现)——03
背包问题0-1背包问题是动态规划中的经典例题,和我上一篇写的旷工挖矿的思路是一模一样的问题描述有n个物品,它们有各自的体积和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?算法思路往往动态规划的题目从最后一步开始分析会有着不错的结果,这里假设背包容量为10首先假设F(c,n)的意义是容量为 c 的背包装前 n 个物品的最大价值,w【i】指第 i 个物品的体积,v【i】指第 i 个物品的价值而我们所说的最后一步是哪一步呢?其实就是从F(10, 3)到F(原创 2020-05-27 15:31:34 · 581 阅读 · 0 评论 -
动态规划:旷工挖矿(递归和非递归实现)——02
矿工挖矿问题该题有递归和非递归的实现,这里两种实现思路都给出来了问题描述有5个金矿,每个金矿黄金储量不同,需要参与挖掘的工人数目也不同,假定有10个工人,每个金矿要么全挖,要么不挖,不可以拆分,试问,想得到最多的黄金,应该选择挖取哪几个金矿。金矿信息如下表:算法思路首先动态规划的三要素(最优子结构,边界,状态转移方程)中我们最先需要找到的就是状态转移方程,而状态转移方程又会涉及到子问题的最优结构,所以我们先看看子问题是什么?在这里首先10个旷工是不会变的,无论挖几个矿都是这1原创 2020-05-26 13:56:03 · 502 阅读 · 0 评论 -
动态规划:走楼梯问题——01
走楼梯问题动态规划简介:动态规划动态规划的核心思想:就是将求解问题分解成多个相互交叠的子问题进行求解,每次求解小型子问题的同时记录计算结果(相当于一个备忘录),在求解较大型子问题的时候会依赖于小型子问题的计算结果,避免重复计算。子问题:子问题的意思就是相对于求解问题来说仅仅是计算的规模变小了,解决问题的目标和思路都没有改变。(例如:二分查找每次将数组分为两部分,每一部分的查找就可以看做是一个子问题)相互交叠的子问题:相互交叠的意思就是大型子问题会包含小型子问题的求解。也就是说求解大型子问题的原创 2020-05-25 15:35:15 · 934 阅读 · 0 评论