
贪心
会飞的蟋蟀
学习中!!
展开
-
luogu P1031 均分纸牌
P1031 均分纸牌描述见链接分析此题归类于模拟和贪心的,起初想用暴力模拟的,写出来非常复杂而且最后RE了非常尴尬。 后来看了看题解,就成了倒数字了,很简练有点抽象。代码大佬正确的#include<iostream>#include<cstdio>using namespace std; int a[10010];int n;...原创 2018-03-23 22:19:18 · 275 阅读 · 0 评论 -
LeetCode 452. Minimum Number of Arrows to Burst Balloons & 435. Non-overlapping Intervals
题解两题一起写,都是pair型数组,都考虑交叠问题,都是贪心。这类题的核心都在于预先sort一下,以second升序排(若相等再以first升序)。这样的好处是,我们再顺序遍历的时候可以很方便地发现交叠情况:比如用一个 p 变量记载之前的second,新位置比较一下first就知道是否相交。Code452int findMinArrowShots(vector<pair<...原创 2018-10-21 10:35:21 · 151 阅读 · 0 评论 -
LeetCode 209. Minimum Size Subarray Sum
题解最短连续子数组和大于target,这个限制非常强,以至于可以利用该性质,在O(n)内完成判断。详细见第一篇代码。第二篇可改进为O(nlog(n)),利用前缀和数组递增性。CodeO(n)int minSubArrayLen(int s, vector<int>& nums) { int n = nums.size(), start = 0, ...原创 2018-10-22 11:16:20 · 122 阅读 · 0 评论 -
LeetCode 406. Queue Reconstruction by Height
题解这题可以巧妙地被结构为一道插排问题。先sort,h从大到小排,h相同按k数从小到大。此时数列前方的大的数已经成为一个局部完整序列了。因为小h不会影响大h的k正确性,然后慢慢考虑后面的h要插入哪里就可以了。这不就是插入排序么。Codeclass Solution {public: static bool cmp(pair<int, int> &a, ...原创 2018-10-08 10:13:34 · 150 阅读 · 0 评论 -
LeetCode 55. Jump Game && 45. Jump Game II
题解LeetCode 上这种题目的变形非常多。因为比较相似这次两题一起写,思路比较连贯一点。第一题 55. mid 难度。这题只要判断能否到达尾部。我们用一个变量cur_max记录可到达的最远位置,遍历数组即可。注意此处出现的span数组,意为在i处时能到达的最远位置,这是此题的关键。第二题 45. hard。 也不难,算最小步长,但是测试用例里有一个case卡时间。最小最大,很明显是...原创 2018-10-06 10:38:17 · 157 阅读 · 0 评论 -
LeetCode 621. Task Scheduler
题解比较有意思的题,不太好归类,应该是贪心。这题的只要换个思路就好做了,就是算idle的时间有多长,因为task必然耗时。给一篇写得很完备的英文解析简介几个核心点:有最大频率的任务,会创造最长的时间间隔如 A _ _ A _ _ A (n=2)这些间隔 _ 可用来放置其他任务,或者留作idle如果间隔不够,那么恭喜你我们不需要idle(思考为什么)特例 有相同最大频率的不同任务。...原创 2018-09-27 18:19:13 · 168 阅读 · 0 评论 -
LeetCode 56. Merge Intervalse
题解检验区间交叠,思路比较直观,先排序再比较,看代码。前面我的,后面的最精炼。O(n^2)class Solution {public: static bool cmp(Interval &a,Interval &b){ return a.start < b.start; } bool used[50000]; ve...原创 2018-09-26 13:13:17 · 117 阅读 · 0 评论 -
luogu P1095 守望者的逃离
题解这题我当作贪心来做了,看大佬们用dp用得很6啊,肥肠羡慕。本题核心思想: 在一段时间内移动尽可能多的位移,最大化时间效率。妥妥的贪心。大体思路:蓝充裕(m>=10)的时候肯定瞬移最快 60m/s,在蓝不够的时候有可能等回蓝再瞬移更快,也可能直接走更快。 这取决于剩余的时间。 代码中列了一个表,人肉算出来的是对 1-6s 时能够产生的最大位移。为什么只算到6s呢?因为以后的...原创 2018-09-12 13:20:59 · 131 阅读 · 0 评论 -
luogu P1233 木棍加工
题解这道题很像之前做过的导弹拦截的题目,关键点是偏序集。 显然答案就是这个二维数集合的最少链划分数,也就是最大的反链长度 (根据Dilworth定理)。 但是直接求反链还是难。 咱们先对其中一维由小到大排序,再对另外一维被固定的数,考察其非降序情况即可。 我看了一些贪心的做法也是可行的。ps: 再次出现 bus error。 在sort()中必须要用严格升序,参见std::sort...原创 2018-08-27 20:21:25 · 250 阅读 · 0 评论 -
luogu P1080 国王游戏 【模版】
题解这题一开始我想歪了。对每个大臣而言,显然排在队尾是能拿到最多钱的,所以我以为只要考虑n个大臣排在队尾 的情况就足以覆盖最大的所有情况了。 问题是什么呢?就是我考虑的是每个大臣能拿到的最值情况,但并不是所有排列下,该排列的最值情况。 就是说在某种情形下,排在队尾的大臣确实拿到了比其他任何排列情况都要多的钱,但是他不是该排列下 的最值。 所以这道题其实是要找到一种能够让这个队列所有成...原创 2018-08-27 16:50:28 · 372 阅读 · 0 评论 -
USACO 2.1.3 三值的排序 Sorting a Three-Valued Sequence
解析这是道贪心题,因为是求最少的交换次数,所以我们的每次交换都要最有价值。 Size数组记录123各自的数量,这样我们就知道123应该在哪些位置。 最有价值的交换是怎样的呢? 比如2在1的位置,而在2的位置里恰好有1,那么交换这两数字 会让两者同时归位。 不停地重复如此操作到最后会有两种情况,一是完全归位,二是仍有几个数无法归位,例如2-3-1 或者2-2-3-3-1-1。易知形如2...原创 2018-07-26 16:39:18 · 279 阅读 · 0 评论 -
USACO 1.4.2 Barn Repair
解析一道贪心题,看了看luogo的题解,发现我的解法还是不太一样的。 大致思路是:既然要求在限定的板数内覆盖的空栏最少,那么其实问题可以转换为, 对一个连续完整的板(覆盖从头到尾),想办法切割成几块板子,使得切出来的空隙尽量大。 这样解的话,就只需要把连续空缺栏的长度排个序就可以了。代码/*PROG:barn1ID:imking022LANG:C++ */#...原创 2018-03-31 18:49:00 · 204 阅读 · 0 评论 -
LeetCode 870. Advantage Shuffle
题解这题有点田忌赛马的意思。对每个B中的数都找A中最小的大于它的数即可。Code这个map用得花vector<int> advantageCount(vector<int> A, vector<int> B) { map<int, int> m; for (int i : A) m[i]++; ...原创 2018-10-21 11:42:01 · 113 阅读 · 0 评论