贪心与动态规划
yuzhang_zy
现在的我不是最好的我,未来的我才是最好的我,每一篇博客都记录着我的成长
展开
-
区间覆盖问题
1. 问题描述:DescriptionFarmer John is assigning some of his N (1 <= N <= 25,000) cows to do some cleaning chores around the barn. He always wants to have one cow working on cleaning things up an...原创 2018-11-09 12:39:17 · 3561 阅读 · 1 评论 -
钢条切割问题(深度优先搜索)
1. 问题描述:Serling公司购买长钢条,将其切割为短钢条出售。切割工序本身没有成本支出。公司管理层希望知道最佳的切割方案。假定我们知道Serling公司出售一段长为i英寸的钢条的价格为pi(i=1,2,…,单位为美元)。钢条的长度均为整英寸。| 长度i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 || - | - | - | - | - | ...原创 2018-11-17 13:31:57 · 1084 阅读 · 0 评论 -
最长递增子序列的动态规划的求解
1. 问题描述:求解最长递增子序列的长度输入:第一行输入的是数组的长度第二行开始输入的是数组中的元素输出:最长递增子序列的长度输入 4 2 3 1 5 6输出 4 (因为 2 3 5 6组成了最长递增子序列)2. ① 对于这种求解最优解的经典问题,我们一般是采用动态规划来进行求解,其中动态规划的核心是找出dp公式或者状态转移方程之前我们使用动态规划去解决一般是创建一...原创 2018-11-24 10:09:45 · 10470 阅读 · 1 评论 -
最长递增子序列的动态规划的求解二
1. 问题描述:求解最长递增子序列的长度输入:第一行输入的是数组的长度第二行开始输入的是数组中的元素输出:最长递增子序列的长度输入 4 2 3 1 5 6输出 4 (因为 2 3 5 6组成了最长递增子序列)2. 使用之前的动态规划的解法的时间复杂度还是有点高,为O(n ^ 2),于是有人又想出了动态规划另外的优化解法,我们可以借鉴其中的思路来开拓我们的思维和更好地理解...原创 2018-11-24 10:30:25 · 265 阅读 · 0 评论 -
斐波拉契数列(记忆型递归求解)
1. 问题描述:求解出斐波拉契数列的第n项2. 对于斐波拉契数列,我们都不陌生,求解的方法也有很多,可以使用普通的递归f(n) = f(n - 1) + f(n - 2)来求解,可以使用矩阵的幂运算来进行求解,可以使用闭式解法来进行推导求解,还可以使用记忆性的递归来进行实现下面使用记忆型的递归来解决,对于通项公式f(n) = f(n - 1) + f(n - 2)我们可以发现假如使用深度...原创 2018-11-17 17:51:06 · 1431 阅读 · 1 评论 -
普通递归的改进(记忆性的递归)
1. 我们发现假如有时候使用递归或者深搜的时候数据量比较大的时候计算速度非常缓慢,而且可以发现最重要的是递归的时候存在重复子问题的重复求解了,比如像斐波拉契数列的求解f(n) = f(n - 1) + f(n - 2)就存在着重复子问题的重复求解f(n - 1)继续递归下去的时候那么又会重复计算f(n - 2),这样假如数据量大的话耗时非常大,而且我们可以发现存在着像斐波拉契这样一类具有这样通项...原创 2018-11-17 18:15:31 · 1290 阅读 · 1 评论 -
斐波拉契数列普通的递归与记忆型递归的耗时比较
1.通过编写普通的递归和记忆型的递归输出执行代码的时间,可以发现数据量大的情况下,记忆型的递归是耗时是比较短的,而普通的递归耗时非常长所以有的时候遇到重复子问题使用递归来解决的时候可以在普通的递归的代码上改进变成记忆型的递归那么耗时会比较短,提高代码的运行性能2. 下面是具体的代码:import java.util.Scanner;public class Main { s...原创 2018-11-17 18:28:18 · 415 阅读 · 0 评论 -
最长递增子序列的动态规划的求解二(二分查找优化)
1. 问题描述:求解最长递增子序列的长度输入:第一行输入的是数组的长度第二行开始输入的是数组中的元素输出:最长递增子序列的长度输入 4 2 3 1 5 6输出 4 (因为 2 3 5 6组成了最长递增子序列)2. 之前我们使用动态规划解决的思路是:dp[i]表示的是长度为i的最长递增子序列的末尾的那个数,在求解的过程中需要在dp数组中找出第一个大于arr[i]的的下标,...原创 2018-11-24 10:54:29 · 1228 阅读 · 1 评论 -
钢条切割(dp解法)
1. 问题描述:Serling公司购买长钢条,将其切割为短钢条出售。切割工序本身没有成本支出。公司管理层希望知道最佳的切割方案。假定我们知道Serling公司出售一段长为i英寸的钢条的价格为pi(i=1,2,…,单位为美元)。钢条的长度均为整英寸。| 长度i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 || - | - | - | - | - | ...原创 2018-11-17 21:30:52 · 4280 阅读 · 2 评论 -
钢条切割(记忆型的深搜)
1. 问题描述:Serling公司购买长钢条,将其切割为短钢条出售。切割工序本身没有成本支出。公司管理层希望知道最佳的切割方案。假定我们知道Serling公司出售一段长为i英寸的钢条的价格为pi(i=1,2,…,单位为美元)。钢条的长度均为整英寸。| 长度i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 || - | - | - | - | - | ...原创 2018-11-18 11:03:10 · 395 阅读 · 0 评论 -
最优解问题的求解
1. 一般来说题目中需要求解出最优解的问题,我们是可以使用普通递归,递推,深度优先搜索,记忆型的递归,贪心或者动态规划来进行求解的其中使用普通的递归或者深搜,递推这些数据量较小的情况下求解速度还行,假如数据量相对大一点的情况下,而且节点的数量比较多,这个时候使用这些方法来解决往往会耗时比较大,有时候都需要求解半天了,原因是它需要搜索搜索的可能,把每一条路都尝试一遍,等到所有的路径走完才结束搜索...原创 2018-11-18 11:27:36 · 11711 阅读 · 0 评论 -
零一背包的深度优先搜索
1. 问题描述:有n个重量和价值分别为wi,vi的物品,从这些物品中挑选出总重量不超过W的物品,求所有挑选方案中价值总和的最大值。1≤n≤1001≤wi,vi≤1001≤W≤10000输入:n=4(w,v)={(2,3),(1,2),(3,4),(2,2)}W=5输出:7(选择第0,1,3号物品)2. ①对于零一背包求解最大价值的问题,我们是可以使用很多方法来解决...原创 2018-11-23 12:27:12 · 574 阅读 · 0 评论 -
完全背包问题的简化思路
1. 问题描述:有n个重量和价值分别为wi,vi的物品,从这些物品中挑选出总重量不超过W的物品,求所有挑选方案中价值总和的最大值1≤n≤1001≤wi,vi≤1001≤W≤10000输入:第一行是n第二行到是物品的重量第三行是物品对应的价值而且物品的数量是无限的,可以无限拿取2. 我们之前动态规划的一般思路来解决这个问题,采用的策略是对于当前的物品我可以拿...原创 2018-11-22 21:49:15 · 870 阅读 · 0 评论 -
完全背包的深度优先搜索
1. 问题描述:有n个重量和价值分别为wi,vi的物品,从这些物品中挑选出总重量不超过W的物品,求所有挑选方案中价值总和的最大值1≤n≤1001≤wi,vi≤1001≤W≤10000输入:第一行是n第二行到是物品的重量第三行是物品对应的价值而且物品的数量是无限的,可以无限拿取2. 我们对于背包问题一般是使用动态规划进行推理来解决的,但是在一开始的时候对于这种求...原创 2018-11-22 21:04:52 · 441 阅读 · 0 评论 -
数字三角形的动态规划的解法
1. 问题描述:在数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大路径上的每一步都只能往左下或 右下走。只需要求出这个最大和即可,不必给出具体路径三角形的行数大于1小于等于100,数字为 0 - 99<br>输入格式:5 (表示三角形的行数 )(接下来输入三角形)73 88 1 02 7 4 4...原创 2018-11-19 22:00:34 · 530 阅读 · 0 评论 -
渡河问题
1. 问题描述:DescriptionA group of N people wishes to go across a river with only one boat, which can at most carry two persons. Therefore some sort of shuttle arrangement must be arranged in order to ...原创 2018-11-02 20:44:55 · 2373 阅读 · 0 评论 -
区间调度的问题
1. 问题描述:有n项工作,每项工作分别在si时间开始,在ti时间结束.对于每项工作,你都可以选择参与与否.如果选择了参与,那么自始至终都必须全程参与.此外,参与工作的时间段不能重复(即使是开始的瞬间和结束的瞬间的重叠也是不允许的).你的目标是参与尽可能多的工作,那么最多能参与多少项工作呢?1≤n≤1000001≤si≤ti≤10^9输入:第一行:n第二行:n个整数空格隔开,代...原创 2018-11-05 21:50:21 · 1642 阅读 · 3 评论 -
区间选点问题
1. 问题描述:DescriptionYou are given n closed, integer intervals [ai, bi] and n integers c1, ..., cn.Write a program that:reads the number of intervals, their end points and integers c1, ..., cn f...原创 2018-11-05 21:52:27 · 912 阅读 · 1 评论 -
字典序最小问题
1. 问题描述:DescriptionFJ is about to take hisN(1 ≤N≤ 2,000) cows to the annual"Farmer of the Year" competition. In this contest every farmer arranges his cows in a line and herds them past the ju...原创 2018-11-08 12:37:57 · 13192 阅读 · 4 评论 -
部分背包问题
1. 问题描述:有n个物体,第i个物体的重量为wi,价值为vi。在总重量不超过C的情况下让总价值尽量高。每一个物体都可以只取走一部分,价值和重量按比例计算。求最大总价值注意:每个物体可以只拿一部分,因此一定可以让总重量恰好为C2. 背包问题是一个很经典的问题,其中背包问题有很多的变体,像部分背包问题,乘船问题等。这些问题都涉及到了求解出最优的解,那么这个时候就需要使用贪心...原创 2018-11-08 21:35:31 · 1417 阅读 · 0 评论 -
01背包问题(递归)
1. 问题描述:有n个重量和价值分别为wi,vi的物品,从这些物品中挑选出总重量不超过W的物品,求所有挑选方案中价值总和的最大值。1≤n≤1001≤wi,vi≤1001≤W≤10000输入:n=4(w,v)={(2,3),(1,2),(3,4),(2,2)}W=5输出:7(选择第0,1,3号物品)(因为对每个物品只有选和不选两种情况,所以这个问题称为01背包)...原创 2018-11-16 12:57:48 · 6284 阅读 · 1 评论 -
01背包问题(记忆型的递归)
1.问题描述:有n个重量和价值分别为wi,vi的物品,从这些物品中挑选出总重量不超过W的物品,求所有挑选方案中价值总和的最大值。1≤n≤1001≤wi,vi≤1001≤W≤10000输入:n=4(w,v)={(2,3),(1,2),(3,4),(2,2)}W=5输出:7(选择第0,1,3号物品)(因为对每个物品只有选和不选两种情况,所以这个问题称为01背包)...原创 2018-11-16 13:14:55 · 1831 阅读 · 0 评论 -
01背包问题的动态规划解法
1. 问题描述:有n个重量和价值分别为wi,vi的物品,从这些物品中挑选出总重量不超过W的物品,求所有挑选方案中价值总和的最大值。1≤n≤1001≤wi,vi≤1001≤W≤10000输入:n=4(w,v)={(2,3),(1,2),(3,4),(2,2)}W=5输出:7(选择第0,1,3号物品)(因为对每个物品只有选和不选两种情况,所以这个问题称为01背包)...原创 2018-11-16 20:16:45 · 3396 阅读 · 0 评论 -
完全背包问题的动态规划解法(普通的思路)
1. 问题描述:有n个重量和价值分别为wi,vi的物品,从这些物品中挑选出总重量不超过W的物品,求所有挑选方案中价值总和的最大值1≤n≤1001≤wi,vi≤1001≤W≤10000输入:第一行是n第二行到是物品的重量第三行是物品对应的价值而且物品的数量是无限的,可以无限拿取2. ①与零一背包不同的是,零一背包中的物品是不可以重复拿取的,只可以拿取当前物品或者...原创 2018-11-22 11:15:03 · 30386 阅读 · 3 评论 -
二分查找第一个大于输入的数字的求解
1. 问题描述:输入:整数n,表示的是数组的大小,整数m表示的是数组的数字的范围,整数k表示的是需要比较的目标数字(数组中的数字按照递增的序列排列的)2. 题目中数组中的数字是按照递增的顺序排列的,所以我们可以使用二分查找的方法来解决这个问题在方法中传入整型数组,数组的开始下标,结束下标,需要比较的数字这些变量,当midVal <= n说明我们应该往mid 下标的下一个位置开始寻...原创 2018-11-24 09:12:58 · 2701 阅读 · 0 评论 -
数字三角形的无返回值的深度优先搜索解法
1. 问题描述:在数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大路径上的每一步都只能往左下或 右下走。只需要求出这个最大和即可,不必给出具体路径三角形的行数大于1小于等于100,数字为 0 - 99输入格式:5 (表示三角形的行数 )(接下来输入三角形) 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5...原创 2018-11-19 19:44:05 · 238 阅读 · 0 评论 -
数字三角形有返回值的深度优先搜索解法(结合记忆型递归)
1. 问题描述:在数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大路径上的每一步都只能往左下或 右下走。只需要求出这个最大和即可,不必给出具体路径三角形的行数大于1小于等于100,数字为 0 - 99输入格式:5 (表示三角形的行数 )(接下来输入三角形)73 88 1 02 7 4 44 5 2 6 5...原创 2018-11-19 21:39:23 · 575 阅读 · 0 评论 -
C++解决区间覆盖问题
1. 在解决区间覆盖问题之前我们需要清楚一个概念,那就是贪心的概念,使用贪心的方法求解的是一类最优化问题的方法,它总是考虑在当前状态下局部最优(或者较优)的策略,来使全局的结果达到最优(或着较优)显然,如果采取较优而非最优的策略(最优策略不存在或者是很难想到)得到的全局结果也不是最优的,因此我们在使用贪心法来求解最优化问题的时候需要对采取的策略进行验证.证明的思路一般是数学归纳法或者是反证法,...原创 2019-07-05 14:59:30 · 3213 阅读 · 0 评论