![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
其他 贪心算法
oranges_c
落寞是岁月的痕迹
展开
-
【HDU4803】Poor Warehouse Keeper(贪心 + 模拟)
参考博客:http://www.cnblogs.com/xuesu/p/3967704.html%20%E5%8F%82%E8%80%83%E5%8D%9A%E5%AE%A2 写的时候只想着第一次到达 x/(y + 1 - eps)的比例..然后直接按上键加剩余下键的次数。。其实要判断每次上键按完后的xx/yy与x/(y + 1 - eps)相比,补齐下键缺少的次数。#in原创 2016-09-01 17:14:06 · 297 阅读 · 0 评论 -
2017美团编程大赛初赛A-C.倒水
分为几种种情况讨论: 1.T比所有的水杯的温度都高,就把所有的水倒完。 先按最高温度倒,然后剩余的按水杯的体积比例倒 2.T比所有的水杯的温度都低,就按最低的水杯温度倒 3.在中间则是Impossible 4.最高温度等于最低温度并且T等于最高温度的话,就是T水不够的都是Impossible(数据有点弱。自己ac的代码自己找出数据卡掉了#include <stdio原创 2017-06-19 20:51:09 · 452 阅读 · 0 评论 -
【HDU6029】Graph Theory(贪心+队列)
题目链接题目大意: T组数据,n个点。 对于编号为2~n的每个点,有两种选择: 1.这个点与之前的所有点连条边。 2.什么边都不连 问给你的这个图是否存在完美匹配。用队列维护没有被匹配的点 初始只有编号为1的点。 接下来对于每个点 如果选择第2个操作,说明这个点不能主动去匹配,只能被动由其他点来匹配,所以放入队列。 如果选择第一个操作,说明可以去匹配,就将队原创 2017-05-07 22:16:36 · 396 阅读 · 0 评论 -
队内训练赛三
PS:来点简单dp + 贪心A:51Nod - 1183 编辑距离状态转移int cost = (s1[i-1] == s2[j-1] ? 0 : 1);int delection = dp[i][j-1] + 1;int insertion = dp[i-1][j] + 1;int substitution = dp[i-1][j-1] + cost;dp[i][j原创 2017-04-06 22:34:43 · 287 阅读 · 0 评论 -
51nod-1191 消灭兔子(贪心)
题目链接这题是上题的进阶。 对于每支箭,我们要找到第一个血量大于伤害值的兔子的位置pos,那么我们把这只箭的伤害值设为pos-1的兔子的血量值 跟上题类似,从后往前贪心 将伤害值为当前兔子血量值的价格放入小顶堆,并且清空数组,因为血量可以相等,防止重复放入。 每次选取堆顶元素就可以了。 如果在消灭某一只兔子时堆为空时,那么说明没有弓箭可以消灭这只兔子,所以输出No原创 2017-03-02 21:15:39 · 333 阅读 · 0 评论 -
51nod-1163 最高的奖励(贪心)
题目链接因为天数最大为n,所以所有结束时间大于n的都可以设为n 考虑天数 从后往前贪心,将结束时间为当前天的奖金放入大顶堆 然后只要选取堆顶元素就行了。 这样可以保证堆中的元素的结束时间都大于等于当前天,然后只要选取奖金最大的就行了。#include <bits/stdc++.h>using namespace std;#define cl(a,b) memset原创 2017-03-02 21:08:14 · 262 阅读 · 0 评论 -
Codeforces Round #393 (Div. 2) -B. Frodo and pillows(贪心)
题目链接题目大意: 有n张床,m个枕头。 每个人至少有一个枕头,相邻的床枕头数差不能超过1.问指定的床最多可以获得多少个枕头。先每张床都给一个。 当床两边都有相邻的床位时。 然后优先给指定的床位,当差超过1时,我们需要给相邻的床位一个枕头。 所以要让指定的床位有两个枕头,要从剩余的枕头里拿出1个。 要让指定的床位有三个枕头,要从剩余的枕头里拿出4个.有两个给旁边的原创 2017-01-23 20:30:28 · 240 阅读 · 0 评论 -
BestCoder Round #91-A .Lotus and Characters(贪心)
题目链接有中文题面。PS:感觉自己还是太年轻,套路还是太少。。orz官方题解: 根据排序不等式,显然应该把字母从小往大放。 一种错误的做法是把正权值的字母取出来从前往后放。错误是因为负权的也可能出现在答案中:放在最前面来使后面每个字母的贡献都增加。 正确的做法是把字母从大往小从后往前放,如果加入该字母后答案变劣就停下来。考虑到要放的字母对整个串的贡献,放前后进行比较。#in原创 2017-01-22 13:53:46 · 202 阅读 · 0 评论 -
Codeforces Round #392 (Div. 2)-D. Ability To Convert(贪心+dp)
题目链接 题目大意: 给你一个进制数n,和一个不超过60位的数k。 以超过十的数代替字母。 问转换成十进制的数最小是多少。PS:果然dp的题懵逼时刻占大多数。dp[i] := 以第i个数结尾的最小的十进制数。 i枚举起点,j枚举起点往后不超过n的数,那么dp[j+1] = min(dp[j+1],dp[i]*n+x) 比如3^3+2*3^2+3^1 = ((3+2原创 2017-01-20 13:53:42 · 330 阅读 · 0 评论 -
Codeforces 755-B. PolandBall and Game(贪心)
题目链接题目大意: 有两个人在玩一个游戏,每个人都有一个由单词组成的列表。由第一个人先开始,每回合都要说一句在自己列表里的并且未说过的话。谁不能再说就算输。问第一个人是否能赢。 Note:每个人的单词列表里的话都是唯一的,一个单词可被两个人共有。要让对方没话可讲,显然要说两个人共有的话。假设有c个共有的单词,如果c是奇数则第一个人可以说c/2+1个,第二个人可以说c/2个原创 2017-01-18 14:20:10 · 332 阅读 · 0 评论 -
Codeforces Round #391 -B. Bash's Big Day
题目链接 题目大意: 给你n个数,问最大的gcd不为1的集合大小。把gcd都变成素因子。 先筛选素数,统计包含素因子的数的个数。 有几个剪枝: 1.如果是1直接跳过 2.如果是素数直接加1 然后就直接枚举素因子并统计#include <bits/stdc++.h>using namespace std;#define cl(a,b) memset(a,b,s原创 2017-01-16 19:31:23 · 270 阅读 · 0 评论 -
【POJ3253】Fence Repair(优先队列+贪心)
题目链接 题目大意: 将一块长度为L的木板切割为两块,花费为L,切割后的两块木板的长度和为切割前的长度。给你N个切割后的木板的长度,问最小花费是多少。书上的一道贪心题。用huffman编码的思想贪心,感觉挺有趣的。 我们可以考虑将两块合并成一块木板,花费为合并后的木板的长度。 根据huffman思想,每次选取长度最小的两个合并,以此贪心,最后可以保证花费最少。如何选取原创 2017-02-07 14:42:48 · 452 阅读 · 0 评论 -
Codeforces Round #390 (Div. 2) - A Lesha and array splitting (贪心)
题目链接题目大意: 将一个长度为n的序列划分成几个连续的子序列,使得每个子序列的和不为0 输出子序列的个数和各区间1.这个序列如果所有元素的和不为0 那么直接输出1个子序列,区间为1到n 2.如果为0且所有元素里存在非0元素,那么这个序列肯定可以划分成两个和不为0的连续子序列,如果都是0则输出NO。 如果存在非0元素,现在要找出这个点,那么从后往前贪心,直到遇到非0。原创 2017-01-08 12:58:21 · 242 阅读 · 0 评论 -
【CSU1809】Parenthesis(线段树 + 贪心 + 前缀和)
题目大意: 给你一个长度为n的匹配的括号序列,有q次询问,每次询问交换a,b的位置,问交换后的序列是否仍然匹配。题解: 这种括号的题目有一种经典的套路就是遇到’(‘加一,遇到’)’减一,这样整个序列最后的前缀和一定是非负的。 贪心一下,判断一下四种情况: 1.2),交换的两个括号是一样的,自然是输出Yes; 3),如果左边是’)’右边是’(‘,更加保证前缀和原创 2016-09-07 18:35:58 · 357 阅读 · 0 评论 -
【HDU5821】Ball(贪心)
题目大意: 给你一个a序列 和 b序列,问能否经过操作把a变成b。操作:取出l 到 r的数,可以以任意的顺序放回。 题解: 假设有4个红球,初始时从左到右标为1,2,3,4。那么肯定存在一种方案,使得最后结束时红球的顺序没有改变,也是1,2,3,4。 那么就可以把同色球都写成若干个不同色球了。所以现在共有n个颜色互异的球。按照最终情况标上1,2,。。,n的序号,那么贪心原创 2016-08-12 20:37:10 · 337 阅读 · 0 评论 -
【HDU5783】Divide the Sequence(贪心)
Divide the Sequence 把长度为n的序列分成尽量多的连续段,使得每一段的每个前缀和都不小于0。保证有解。 从后往前贪心分段即可。 /(ㄒoㄒ)/~~#include <cstdio>#include <cstring>typedef long long LL;const int maxn = 1000000 +10;LL sum[maxn];in原创 2016-08-08 10:27:28 · 255 阅读 · 0 评论 -
【HDU5813】Elegant Construction(贪心)
记录一个菜逼的成长。。将顶点按能到达的点数从小到大排序,排好序之后每个点只能往前面的点连边. 因而如果存在一个排在第i位的点,要求到达的点数大于i-1,则不可行;否则就可以按照上述方法构造出图. 复杂度O(N^2). PS:一道水题,训练的时候条件漏了。。好TM菜啊。Orz.#include <cstdio>#include <iostream>#include <cstring>#inc原创 2016-08-10 12:59:47 · 190 阅读 · 0 评论 -
【HDU5802】Windows 10 (贪心 + dfs)
记录一个菜逼的成长。。Windows 10直接贪心就好比较直观的看法是使劲往下降,然后升回来或者使劲往下降然后停顿然后再使劲往下降。。。于是就能将问题变成一个子问题,然后dfs就好需要注意的是由于按up键也可以打断连续向下的功效所以应该记录停顿了几次,以后向上的时候用停顿补回来#include <cstdio>#include <iostream>#include <cstring>#inc原创 2016-08-08 10:24:44 · 286 阅读 · 0 评论 -
【loj】#6003. 「网络流 24 题」魔术球(贪心)
假设有 n 根柱子,现要按下述规则在这 n 根柱子中依次放入编号为 1,2,3,4,⋯ 的球。每次只能在某根柱子的最上面放球。在同一根柱子中,任何 2个相邻球的编号之和为完全平方数。试设计一个算法,计算出在 n 根柱子上最多能放多少个球。原创 2017-07-19 16:38:32 · 305 阅读 · 0 评论