
贪心
文章平均质量分 82
小胡同的诗
千里之行,始于足下
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
HAUT1227 Flowers(贪心)
题目链接:haut1227题面解题思路贪心这个问题的第一个关键点在于要发现:组成混合颜色的方案一定要优先于组成纯色的方案。因为组成纯色方案更具鲁棒性。在相同资源下,组成三束分别不同颜色的花束一定也可以将其改成三束混合颜色的花束;而在小于三束混色花束的资源下却无法组成任何一束花。于是,我们大胆认为前者方案优于后者。第二个关键点在于要发现:构成最大方案数的核心部分就是混合颜色的花束数量,因为当无法构成混合颜色花束时,问题就相当简单了,直接计算各自的纯色花束即可。而构成混合颜色花束数量取决于三种颜色中原创 2022-02-05 19:17:05 · 772 阅读 · 2 评论 -
LeetCode134 加油站(贪心)
题目链接:leetcode题面题目大意gas表示到达 i 位置后能得到的充值cost表示从 i 离开后需要的消费问是否能够从前往后绕一圈回到原点解题思路易错点对于一个起点,即使途中所有的充值和消费大于等于0,但是途中某个位置一旦没油了就会终止。枚举枚举所有起点,暴力检查。时间复杂度 O(n2)O(n^2)O(n2),空间复杂度 O(1)O(1)O(1)。贪心容易想到能绕一圈的前提是所有的所有点的充值和消费求和要大于等于0,在此前提我们去找起点。对于一个合法的起点,我们应该尽原创 2020-09-21 10:44:57 · 161 阅读 · 0 评论 -
FZU2306远征(双指针)
题目链接:fzu2306解题思路:每个小的最好能依赖于比他大的而自己形成一队,而由于队列的关系,那个大的此时也依赖于下一个,于是最好的排列一定是一大一小交叉的,双指针可以有效地实现这个逻辑。Code:#include <cstdio>#include <algorithm>using namespace std;const int maxn = (int)...原创 2019-10-24 12:25:16 · 495 阅读 · 0 评论 -
求坐标轴上点的最近K个点(双指针)
思路:预处理一下点的顺序,然后询问的时候从Tag左边右边分别找k个点,只后双指针扫一遍就能得到最近的k个序列#include <bits/stdc++.h>using namespace std;struct node{ #define MAXN 1005 int pos; int id; bool operator < (const n...原创 2019-08-27 22:11:26 · 324 阅读 · 0 评论 -
三个数组三数和问题思考(双指针)
题目:之前介绍过在一个数组上的三数和问题,根据排序后的单调性,我们可以利用双指针来寻找到三个数和为k的三元组,对于四元组实际上多一维进行枚举(四数和问题),这里还有个hash表的解法。那么,回归三数和问题,如果三个数分别处在三个数组中呢?所求的三元组要处于三个数组。思路:我们同样用双指针的思路:首先我们要对三个数组排序接着枚举A数组构造k=answer−A[s]k=answer-A[s]k...原创 2019-09-02 10:05:50 · 838 阅读 · 0 评论 -
LeetCode56. 合并区间(思维+贪心)
题目链接:Leetcode56思路:贪心,先按左端点排序并且在左端点相同的情况下右端点靠近左边的排前面,然后用双指针访问所有区间,当左端点大于前面的右端点说明两个区间互斥了,要把之前的并区间推入答案集中,由于是按左端点为第一关键字的排序,所以后面的只要更新右端点就够了。最后可能会没有更新,所以人为地加一个最大地区间保证这个区间之前地全部更新。这题实际上是让你求区间的并集,如果求交集呢?见Lee...原创 2019-09-06 23:45:28 · 295 阅读 · 0 评论 -
LeetCode986. 区间列表的交集(贪心)
题目链接:Leetcode986思路:贪心,由于排好序了,直接双指针扫,思路和归并排序合并比较类似,注意往后移动的条件是尾部,因为一个矩形的结束条件是尾部比完了,不能写成是头部class Solution {public: vector<vector<int>> intervalIntersection(vector<vector<int>...原创 2019-09-07 07:36:31 · 433 阅读 · 0 评论 -
求n个闭区间的所有交集(贪心+线段树)
问题描述:给你n个闭区间,输出这n个开区间的所有交区间,可能存在一个子区间有多次重复,一个交区间的定义是至少有两个大区间都包含它,并且答案集中要尽可能地把所有区间合并。注:为了避免歧义,头对尾交于一个点则不算交。思路:这是对于力扣986地一个拓展,如果问题约束到一个交区间最多只有两个大区间包含它,那么就可以先把区间预处理成像力扣986那样的两个递增区间,用双指针求交集。对于这个问题我们也是要...原创 2019-09-07 08:13:37 · 1827 阅读 · 0 评论 -
LeetCode646最长对数链(贪心 or 动态规划)
题目链接:leetcode646思路:动态规划这题的动态规划和LIS的思想很接近,dp[i]dp[i]dp[i]表示前i个数对的最长链长度,但LIS由于是一维的可以用二分优化查找,而本题不行。为了消除后效性,本题还有预先做一个按右边界排序的预处理,其思想和DAG上的DP很像,DAG通过拓扑排序消除后效性,拓扑排序也是DAG的DP顺序。但本题用排序是由于还要建图,复杂度并没有降低,所以...原创 2019-09-20 18:11:26 · 357 阅读 · 0 评论 -
应用举例11.6 哈夫曼编码(单调队列 or 优先队列)
问题描述每一个单词有一个频率,构造一个压缩算法使其带权路径和最小(叶子节点的频度*深度的累加),并输出每个单词的压缩编码。思路建树贪心构造哈夫曼树的经典压缩算法,以下写几种建树实现的算法:暴力枚举构造因为每次要选取2个当前最小的构成一个小的分支,这两次搜索可以去链表中摘两个最小的块封装成哈夫曼树并放回链表中,迭代n-1次即可,算法复杂度O(n2)O(n^2)O(n2)。具体实现看戳...原创 2019-09-29 10:23:20 · 1273 阅读 · 2 评论 -
查询区间恰好有2个的数字种类数
思路:离线做法:首先离散化数字arr,并按右端点处理询问,原理和处理区间种类数一样然后把1~n的相同的数字预处理一下,让每个相同的数字可以索引到它后面那个位置,也称为这个节点的后继,实际上就是按类构造静态链表之后预处理每个链表首部有后继的节点在表头位置+1然后根据树状数组处理1~n的区间,每当一个节点有后继时它的位置-1,后继+1,使得该区间的总数不变,并且靠后的区间也能够共享到这个成果...原创 2019-07-12 10:43:05 · 437 阅读 · 0 评论 -
FZU2212 Super Mobile Charger(贪心)
题目大意:T组测试数据,接下来一个n和cost表示n部手机以及蓄电池的电量,接下来有n部手机的电量值,问利用这个蓄电池最终有几部满电的手机。思路:排序,缺电量少的先充,保证能用最少的电量让最多的手机满电。Code:#include <iostream>#include <algorithm>using namespace std;const int maxn ...原创 2019-04-18 20:19:19 · 164 阅读 · 0 评论 -
HDU1051
题意:给你n个棍子的长和重,每一次选棍子的长度和重量都不能少于上一组数据对应的值。否则就要多一次来选,统计至少要多少次。解题思路:贪心,每一次都要选更多的木棍,预处理排序一下使得数据更紧凑,然后就是选木棍了。AC代码如下:#include<iostream>#include<algorithm>using namespace std;struct node{ i...原创 2018-02-20 17:59:29 · 242 阅读 · 0 评论 -
HDU田忌赛马
题意:类似于田忌赛马,要让田忌赢率最大的赛法解题思路:每一次比赛中,如果田忌最快的马能赢齐王最快的马就让两个赛,否则看看最慢的马是否能赢,再不然就祈求平局,这里的平局希望他最慢的马去拉齐王最快的马比,即使输了也不会亏。其实这个问题就是贪心的思路,每次缩短数据的区间,知道把区间缩为0问题就解决了,而每次处理端点的马的问题就得到一个局部最优解。AC代码如下:#include<cstdio>...原创 2018-02-21 11:06:51 · 309 阅读 · 0 评论 -
HDU1800(贪心,lis变形)
题意:给你n个数,求这些数经过排序后能组成几组严格上升子序列。解题思路:一开始直接排序模拟,时间复杂度O(n*n)。接着发现其实就是找序列中重复最多的元素。为什么呢?你想,我们序列排完后假如都不重复就所有人共用1个扫把;如果某段有个元素重复,我们把它提出来,单独一组,假如有多个重复,并且重复的元素都互相不重复,就相当于多1组出来,否则,就再多。找重复元素我们可以用之前STL二分查找的两个函数,处理...原创 2018-02-21 13:00:21 · 245 阅读 · 0 评论 -
牛客网练习赛--填数字(贪心)
题目大意: 给你一个N(资本),以及下标1~9分别对应的费用,让你用这些资本选取的数字(下标 )组成一个数字,这个数字尽量大.解题思路: 刚开始想到贪心,因为整个串的长度一定为N/min,然后替换其中的数字,因为这资本N不一定用得完。写了个爆搜+剪枝,T了。后又想到这是类似于背包类型的问题,完全背包?时间到了还是没过,后来看了别人的代码。恍然大悟…还是菜QAQ报告 每次输出的时候最坏的情况...原创 2018-06-15 23:25:21 · 251 阅读 · 0 评论 -
2018计祘之道 初赛 第一场 (A)
题目大意: 给你n辆车的重量,并且给你降低某一辆车1KG所需的金额S,以及你的所有钱P。注意,车的最小重量只能为1,并且重量都是整数。问:最大限度地使用这些钱将所有车的重量尽量减小,问结果这些车中重量最大为多少?解题思路: 题目的大致意思可以理解为:将所有车的重量之间的差值尽量缩小,求其中max。可以贪心地处理。这里由于数据都在20000以内,可以利用桶排序,重复元素的处理也会比较方便。A...原创 2018-06-09 21:36:57 · 247 阅读 · 0 评论 -
HDU4561连续最大积(DP+优化 or 贪心模拟)
题目链接: hdu4561题目大意:给一段n长的序列,由-2,0,2组成,问连续乘积最大的幂是多少?如果乘积为0或负数幂输出0。解题思路:解法1:dp[i][0]: 表示考虑到i位置的元素且积为负数的2的幂dp[i][1]: 表示考虑到i位置的元素且积为正数的2的幂转移方程:当elem[i] == 2若dp[i-1][0] != 0, 则dp[i][0] = dp[i-1][...原创 2019-01-17 17:24:37 · 337 阅读 · 0 评论 -
蓝桥杯--2013年第四届C/C++B组省赛
题目标题: 高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢? 高斯出生于:1777年4月30日。 在...原创 2019-02-27 19:25:49 · 489 阅读 · 0 评论 -
剑指offer--剪绳子(贪心 | DP)
解题思路:有动态规划和贪心两种方法。贪心通过打表我们发现这样的规律:一个数拆分达到最大一定是其拆乘3的个数达到最大,但如果结尾剩下1的话要少拆1个3从而拼成1个4。动态规划dp[i]:表示将长度为i的线段裁剪为m段的乘积最大值 (2 <= m <= n)转移方程:dp[i] = dp[j] * dp[i-j] (1 <= j <= i/2)class So...原创 2019-03-09 22:39:52 · 394 阅读 · 0 评论 -
剑指offer--把数组排成最小的数(思维)
思路1(暴力搜索) O(n!∗n)O(n!*n)O(n!∗n)就是直接暴力搜所有排列的情况复杂度分析:先不考虑是否有重复的情况每个位置选数就是个全排列,中规模的数据就一定超时代码省略思路2(贪心) O(n2logn)O(n^2logn)O(n2logn)利用排序的思路将相邻两个数字组合,采取较小的那种组合方式进行排序,因为:如果A<B(A,B指的是每个位的数字),那...原创 2019-03-13 15:39:43 · 178 阅读 · 0 评论 -
HDU1050(贪心)
题目大意:给你400个房间,每个房间标号,一条栈道的上面全是奇数,下面全是偶数,每十分钟内每个位置的两个房间中间的栈道只能同行1次,问把这n条桌子从不同房间放到另一个房间中至少要几分钟。解题思路:刚开始相当的思路是模拟数组,每次标记,结果WA,后来果断改变思路。觉得可能是类似于贪心或者动态规划的题,每个时间段搬桌子一定是越多越好,这样n条桌子才能更早地搬完。若何考虑每个时间段搬更多的桌子呢?你可以...原创 2018-02-20 01:26:10 · 1782 阅读 · 0 评论