贪心算法
文章平均质量分 70
Smoothzjc
SCAU 希望在CSDN上结识到更多志同道合的人!
展开
-
算法设计与分析 SCAU17104 视频流有效调度
#### 1. 贪心算法由于题目要求是 **优先输出的是“字典序”最小的有效调度**,所以贪心思想也是比较容易想到的,即:每次都从头往后找,找到第一个满足视频流调度条件的,就进行记录,然后重新从头往后找,直到所有视频流都记录为止(即所有视频流都已发送)。#### 2. 搜索 + 回溯 + 剪枝此题我们的思想类似于全排列,也就是将所有序号按字典序从小到大排列出来,当找到第一个满足条件的序列,就停止算法。原创 2022-11-22 17:53:46 · 343 阅读 · 0 评论 -
算法设计与分析 SCAU17103 基站建设(优先做)
从左到右考虑基站安置的位置,要使得基站数最少,又要所有居民房子都被基站4km范围内覆盖到,那就尽量保证每个房子都可以满足最大距离4km的覆盖。因此如果某个房子不在你当前安置的基站4km的距离内,那就在那个房子的下个4km的地方建立新一个基站即可,这样基站数最少。所以我们的策略是:将下一个基站安置在当前那个不在覆盖范围内房子向东4km远的距离。原创 2022-11-21 21:02:07 · 467 阅读 · 0 评论 -
算法设计与分析 SCAU17964 水桶打水
每个人整个打水的时间为:本人等待时间 + 本人实际充水的时间;而本人的等待时间又为:排在 **本人之前所有人** 的充水时间之和。1. 本题目标是所有人打水花费的总时间和最小。2. 由于排在越前面的人,他的**充水时间计算次数就越多**,3. 因此充水时间 **越小的人排在前面** 可使所有人打水花费的总时间和越小,所以用贪心法解答。原创 2022-11-21 20:42:53 · 414 阅读 · 0 评论 -
算法设计与分析 SCAU11079 可以移动的石子合并(优先做)
保证每次选两堆最多的,合并直至只剩一堆为止,能获得最大得分;1. 保证每次选k堆最少的,合并直至只剩一堆为止,能获得最小得分。2. 在合并之前,若 **n%(k-1)!=1**,说明合并到最后一轮时,**剩下不是k堆(而是比k堆少)**,这样算的并不是最小得分,而必须在合并之前添加**若干个为0**的虚拟堆,目的为凑成的堆数保证每次都能有k堆合并(包括最后一次)最后合并为1堆。原创 2022-11-21 20:06:29 · 363 阅读 · 0 评论 -
算法设计与分析 SCAU10346 带价值的作业安排问题
这题较简单,求总效益值最大的相容子集,即把重复的元素集合中效应较小的给去除即可。1. 初始化三个数组,time 一个记录各时间节点,val 记录各节点效应,all 用于打表,记录相应时间节点(下标)是否有效应2. 如果 all 数组该时间节点值为0,说明该时间节点第一次记录效应,直接加入即可3. 如果 all 数组该时间节点值不为0,说明该时间节点不是第一次记录效应,即需要去重,条件是如果新来的效应如果较大,就代替原本的,否则保持原来的效应不变4. 在进行上面循环遍历的同时记录总效应 sum 即可原创 2022-11-21 14:51:23 · 540 阅读 · 0 评论 -
算法设计与分析 SCAU8605 删数问题
利用“最陡下降点”优先,即每次找到第一个元素,使其满足大于下一个元素。正如上述的那个例子,第一个删除的是9,因为9>0;得到的整数是17806;第二个删除的是8,因为8>0,得到的整数是1706,第三个删除的是7,因为7>0,得到的整数是106;第四个删除的是1,因为1>0,得到的是06,为正确的答案。原创 2022-11-20 21:57:56 · 207 阅读 · 0 评论 -
算法设计与分析 SCAU8598 整除15 问题
对我感兴趣的小伙伴可查看以下链接公众号:Smooth前端成长记录。原创 2022-11-20 21:51:18 · 166 阅读 · 0 评论 -
算法设计与分析 SCAU11091 最优自然数分解问题(优先做)
注意到: 若a+b等于一个常数,则|a-b|越小,ab就越大。贪心策略:极尽拆解,尽可能先将n拆成3,3,3,...,3;若拆成若干3后还有剩余,则为2,或2和2。要使得加数互不相同,又尽可能集中,那加数只能是连续的自然数了。贪心策略:当n等于1至4时**单独处理**。n大于4时,将n分成从2开始的**连续的自然数的和**。如果最后剩下一个数,将此剩余数在**后项优先的方式下均匀地分给前面各项**。原创 2022-11-17 16:13:27 · 566 阅读 · 1 评论 -
算法设计与分析 SCAU8602 区间相交问题(优先做)
贪心技巧:通常贪心都伴随着排序。我们要保证去掉的区间数最小,即要让区间在有序的条件下,再进行删除重叠区间。- 明确了贪心的方向后,接下来要思考如何删除重叠区间,下面是删除重叠区间的算法思路原创 2022-11-17 10:32:17 · 360 阅读 · 0 评论 -
605. 种花问题 -力扣(leetCode)c++贪心算法
种花问题假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false。示例 1:输入:flowerbed = [1,0,0,0,1], n = 1输出:true示例 2:输入:flowerbed = [1,0,.原创 2021-07-12 10:01:10 · 451 阅读 · 0 评论 -
435. 无重叠区间 -力扣(leetCode)c++贪心算法
无重叠区间给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:输入: [ [1,2], [1,2], [1,2] ]输出: 2解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。示例 3:输入: .原创 2021-07-11 21:40:44 · 572 阅读 · 0 评论 -
455. 分发饼干 -力扣(leetCode)c++贪心算法
分发饼干假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。示例 1:输入: g = [1,2,3], s = [1,1]输出: 1解释:你有三个孩子和两块小饼干,3个孩子的胃口.原创 2021-07-10 22:52:57 · 370 阅读 · 0 评论 -
135. 分发糖果 -力扣(leetCode)c++贪心算法
分发糖果老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。评分更高的孩子必须比他两侧的邻位孩子获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢示例 1:输入:[1,0,2]输出:5解释:你可以分别给这三个孩子分发 2、1、2 颗糖果。示例 2:输入:[1,2,2]输出:4解释:你可以分别给这三个孩子分发 1、2、1 颗糖果。第三个孩子只得到 .原创 2021-07-11 00:40:50 · 423 阅读 · 0 评论