
贪心算法
~无相~
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
D - New Year Snowmen(优先队列+贪心)
思路 题意:给你n个雪球,每个雪球都有一个半径,做一个雪人需要不同半径的三个雪球,问最多可以做多少个雪人 做法:贪心:每次都选剩余数量最多的三种半径的雪球,原因是如果我们选数量少的雪球,那么有可能最后没有充分利用数量多的雪球,例如1 2 3 4 5 5 ,这样如果每次选数量多的 答案应该是 2,分别为 5 4 3和5 2 1,反之,我们如果第一次不选数量多的,无论如何都只能堆一个雪人。 利用大顶堆来每次选出数量最多的三种雪球 代码 #include <cstring> #include &原创 2020-06-06 09:34:28 · 199 阅读 · 0 评论 -
试题 历届试题 区间移位
思路(不懂为什么这样贪心,只知道怎么做) 1.把所有的区间左右端点读入,并且端点都乘以2,也就是扩大两倍,因为后面要二分答案,但是答案又会有0.5的小数位,二分的答案就会是扩大两倍就会是整数,以便更好二分,只要最后答案/2就可以了 2.区间按右端点排序 3.开始二分答案,记最大移动距离为mid,记当前没有被覆盖的区间点:k=0,枚举所有的区间,如果k在[ai-mid,bi+mid]内,就说明能被该...转载 2020-04-07 11:25:06 · 449 阅读 · 0 评论 -
Array Splitting
思路 代码 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=3e5+5; ll sum[N]; int main(){ int n,k;scanf("%d%d",&n,&k); for(int i=1,x;i<=n;++i) scanf(...原创 2020-04-06 11:15:53 · 157 阅读 · 0 评论 -
Minimize the error
思路 贪心:先把a[i]-b[i]的绝对值存入优先队列,在一 一取出最大值,每次把top元素减一,再把结果的绝对值存入队列。直到操作次数用完,在统计一下结果就好了。 代码 #include <cstring> #include <iostream> #include <algorithm> #include <cstdio> #include <...原创 2020-03-20 12:24:49 · 191 阅读 · 0 评论 -
拿物品
题目 链接:https://ac.nowcoder.com/acm/contest/3003/F 来源:牛客网 题目描述 牛牛和 牛可乐 面前有 n 个物品,这些物品编号为 1,2,…,n1,2,\dots,n1,2,…,n ,每个物品有两个属性 ai,bia_i, b_iai,bi 。 牛牛与 牛可乐会轮流从剩下物品中任意拿走一个, 牛牛先选取。 设 牛牛选取的物品编号集合为 H,牛可乐选取...原创 2020-02-11 12:38:42 · 346 阅读 · 0 评论 -
AcWing 1239. 乘积最大
分析 代码 #include <cstring> #include <algorithm> #include <iostream> using namespace std; #define LL long long const int mod=1000000009; int g[100005]; int main(){ int n,k; ci...原创 2020-02-09 13:25:01 · 137 阅读 · 0 评论 -
Acwing1235. 付账问题
题目 几个人一起出去吃饭是常有的事。 但在结帐的时候,常常会出现一些争执。 现在有 n个人出去吃饭,他们总共消费了 S元。 其中第 i个人带了 ai元。 幸运的是,所有人带的钱的总数是足够付账的,但现在问题来了:每个人分别要出多少钱呢? 为了公平起见,我们希望在总付钱量恰好为 S 的前提下,最后每个人付的钱的标准差最小。 这里我们约定,每个人支付的钱数可以是任意非负实数,即可以不是 1分钱的整数倍...原创 2020-02-09 12:26:30 · 369 阅读 · 0 评论 -
AcWing 122. 糖果传递
分析 代码 #include <cstring> #include <algorithm> #include <iostream> using namespace std; #define LL long long const int N=1000010; LL c[N]; LL a[N]; int main(){ int n; cin >...原创 2020-02-03 11:32:37 · 338 阅读 · 0 评论 -
Acwing104. 货仓选址
思路 首先考虑一下四个点的情况,a1<a2<a3<a4;则dis=|a1-x|+|a2-x|+|a3-x|+|a4-x|;我们改变一下顺序,使得首尾两两配对,|a1-x|+|a4-x|,|a2-x|+|a3-x|,如果要使得|a1-x|+|a4-x|最小,x应该取a1和a4之间,且大小为a4-a1; 同理,x也要取在a2和a3之间,所以对于偶数个点,应该取在中间两个点之间,对于奇...原创 2019-11-26 16:14:12 · 251 阅读 · 0 评论 -
AcWing 913. 排队打水
思路 就是很简单的的一道题目,只要从小到大排序,贪心在于把耗时最少的放在最前面。 代码 #include <iostream> #include <algorithm> #include <cstring> using namespace std; #define ll long long const int N=1e5+5; int a[N]; int mai...原创 2019-11-26 15:51:56 · 136 阅读 · 0 评论 -
148. 合并果子
思路 一道Huffman树问题,贪心在每一次合并堆的时候,都取最小的两个堆合并。 用一个优先队列(小顶堆)来存下所有堆的数据,每次取前面两个合并就可以了。 类似 Acwing282. 石子合并 设有N堆石子排成一排,其编号为1,2,3,…,N。 每堆石子有一定的质量,可以用一个整数来描述,现在要将这N堆石子合并成为一堆。 每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子...原创 2019-11-26 15:41:20 · 163 阅读 · 0 评论 -
AcWing 907. 区间覆盖
思路 令需要覆盖的区间开头为st,结尾为ed 1.将所有的区间按左端点排序 2.找到能覆盖st的区间中右端点最大的哪一个,这一步用了贪心 3.更新st,最后判断ed是否被覆盖就可以了 代码 #include <iostream> #include <cstring> #include <algorithm> using namespace std; const ...原创 2019-11-26 15:07:00 · 239 阅读 · 0 评论 -
AcWing 906. 区间分组
思路 这个区间贪心问题,是要按照区间左端点排序。 和之前区间问题一样,我们需要分情况讨论贪心决策 1.如果一个区间的左端点比当前每一个组的最右端点都要小,那么意味着要开一个新区间了,这个条件还可以优化成,一个区间左端点比最小组的右端点都要小就开一个新组。 2.如果一个区间的左端点比最小组的右端点大,那么就放在该组,这其实也是一个贪心,因为是先考虑最容易放入一个区间的组嘛 这道题对于数据结构上的选择...原创 2019-11-26 13:49:56 · 301 阅读 · 0 评论 -
905. 区间选点
分析 区间选点问题是一个经典的区间贪心问题,关键在于贪心的抉择 首先,对于一个区间来说,怎样选点会使得结果最好呢?对于一个没有规律的区间集合来说,不太明确,那么我们尝试把所有区间按照区间右端点的大小排序。 这样我们再来考虑这个问题,假设我们用一个end来表示当前遍历到的区间,如果我们假设end之前所有的区间取点都取好了,那么如何取下一个点呢?这下很明显,由于前面的点都取好了,那么我们只要考虑如何取...原创 2019-11-26 12:25:54 · 157 阅读 · 0 评论 -
Uva11491
思路:典型贪心法 就是每次都除去数字中最小的数字。,建议用字符串来存数字,好用 代码 #include <stdio.h> #include <string.h> #include <algorithm> #include <vector> #include <sstream> #include <iostream> #inc...原创 2019-09-15 14:16:00 · 285 阅读 · 0 评论 -
uva1615
思路 代码(就多了转化成区间的一步,其他的就是区间取点问题啦!) #include<iostream> #include<sstream> #include<stdio.h> #include<vector> #include<algorithm> using namespace std; struct number { double...原创 2019-09-16 19:20:37 · 231 阅读 · 2 评论 -
uva1153
思路:典型的贪心法 就是选择不相交区间的问题,建议看紫书 代码 #include<iostream> #include<sstream> #include<stdio.h> #include<vector> #include<algorithm> using namespace std; struct number { int q; ...原创 2019-09-16 19:35:08 · 193 阅读 · 0 评论 -
Uva1149
思路:典型的贪心算法 根据贪心算法的思路,我们应该尽可能地将两个物品放入背包,那么就从最轻的和一个比较重的开始放入,如果最轻的都不能和其他任意一个物品一起放入背包就没法再放入两个物品了 代码 #include <stdio.h> #include <string.h> #include <algorithm> #include <vector> #i...原创 2019-09-15 13:13:19 · 158 阅读 · 0 评论