
算法设计-贪心法
文章平均质量分 57
JeraKrs
本人目前就职于百度商业研发部,有需要内推的朋友简历可发我邮箱 jerakrs@qq.com
展开
-
uva 10714 Ants(贪心)
题目连接:10714 - Ants题目大意:一根棍子上有n只蚂蚁, 这些蚂蚁开始可以任意朝着一个方向移动一直走,向左或是向右,并且移动速度是相同的,但是一旦蚂蚁碰到迎面走来的另一只蚂蚁,那么这两只蚂蚁都会马上改变移动方向,朝反方向移动。求所有蚂蚁离开木棍的最小和最长时间。解题思路:其实题目给出的两只蚂蚁碰头的可能是迷惑人的,因为开始所有蚂蚁都朝一个方向移动,速度又相同,根本原创 2013-08-24 10:54:29 · 1298 阅读 · 0 评论 -
uva 10148 - Advertisement(区间选点问题)
题目连接:10148 - Advertisement题目大意:给出目标数和n个行人, 让后给出n个人的移动方向(从某一站移动到另外一站), 现在要粘贴广告在一些站台上,要使得每个行人看到的广告数尽量接近目标。解题思路:典型的区间选点问题,见算法入门经典P153.#include #include #include using namespace std;原创 2013-08-26 11:00:10 · 1163 阅读 · 0 评论 -
uva 10720 - Graph Construction(贪心-Havel-Hakimi)
题目连接:10720 - Graph Construction题目大意:给出一张有n个点的图,然后再给出每个点的度数。求这个图是否可能存在。解题思路:Havel-Hakimi 定理, 每次选取最大的d[i]和依次比它的d[i]个点连接。#include #include #include using namespace std;const int N =原创 2013-08-26 09:47:38 · 1636 阅读 · 0 评论 -
uvalive 2322 Wooden Sticks(贪心)
题目连接:2322 Wooden Sticks题目大意:给出要求切的n个小木棍 , 每个小木棍有长度和重量,因为当要切的长度和重量分别大于前面一个的长度和重量的时候可以不用调整大木棍直接切割, 否则要进行调整。现在要求求出一个序列, 使得调整的次数最少, 输出调整的次数。解题思路:将n个小木棍先按照 长度和重量的大小排序,然后按照顺序将小木棍分堆,可入堆的要求是长度和重量大原创 2013-08-31 15:06:37 · 1157 阅读 · 0 评论 -
uva 10718 Bit Mask(贪心)
题目连接:10718 Bit Mask题目大意:给出一个T, 和一个下限L, 上限R, 在[L, R]之间找一个数, 使得这个数与T做或运算之后的数值最大 输出这个数。解题思路:将T转换成二进制,对应的为0的地方要填1, 为1的地方填0, 判断的时候还要考虑上下限的问题。#include #include const int M = 32;long lo原创 2013-08-30 22:49:47 · 1139 阅读 · 0 评论 -
uvalive 2519 - Radar Installation(区间选点问题)
题目连接:2519 - Radar Installation题目大意:给出n和半径r, 然后给出n个坐标, 现在要求在x轴选出最少的点, 以这些点为圆心, 半径为r画圆, 要求将所有点均在画的圆内。解题思路:区间选点问题,就是变形了一下。#include #include #include #include using namespace std;co原创 2013-08-31 21:09:44 · 1242 阅读 · 0 评论 -
uvalive 2326 - Moving Tables(区间覆盖问题)
题目连接:2326 - Moving Tables题目大意:在一个走廊上有400个教室, 先在有一些桌子要移动, 每次移动需要十分钟, 但是不同房间的桌子可以在同一个十分钟内移动,只要走廊没有被占用就可以, 注意教室序号1 和 2 是在对面。注意:给出的区间没有分左边或者是右边比较大。解题思路:区间覆盖问题, 将所有给出的区间处理一下, 去除对面房间这样的情况。 让后将原创 2013-08-31 20:31:37 · 1279 阅读 · 0 评论 -
uvalive 2949 - Elevator Stopping Plan(贪心+二分)
题目连接:2949 - Elevator Stopping Plan题目大意:某个抠门的公司只有一个电梯, 现在有n 个人从1楼, 他们有各自想要到达的楼层, 然后电梯每上一楼需要4 秒, 每在一个楼层开门需要10 秒, 然后然爬楼梯的话需要20一楼。问, 如何用最短的时间让所有人都到达各自想要到的楼层。解题思路:因为人可以爬楼梯, 所以可以在某个楼层下楼之后走楼梯到达想要原创 2013-09-01 15:35:05 · 1665 阅读 · 0 评论 -
hdu 1003 Max Sum(连续最大和)
题目连接:1003 Max Sum题目大意:在一个数组中, 找到连续最大的和, 并输出它们的范围, 尽量长。解题思路:累计求和, 复杂度o(n), 听别人讲了一下这种方法, 就来试试看了。#include const int N = 100005;const int low = -0xfffffff;int main() { int cas, t原创 2013-09-01 21:51:11 · 933 阅读 · 0 评论 -
hdu 1231 最大连续子序列
题目连接:1231 最大连续子序列hdu 1003 的变形, 没什么好说的。#include const int N = 10005;const int low = -0xfffffff;int main() { int n, num[N], l, r, rec, Max, sum; while (scanf("%d", &n), n) { for原创 2013-09-01 22:07:10 · 952 阅读 · 2 评论 -
uvalive 2088 - Entropy(huffman编码)
题目连接:2088 - Entropy题目大意:给出一个字符串, 包括A~Z和_, 现在要根据字符出现的频率为他们进行编码,要求编码后字节最小, 然后输出字符均为8字节表示时的总字节数, 以及最小的编码方式所需的总字节数,并输出两者的比率, 保留一位小数。解题思路:huffman编码。#include #include #include using nam原创 2013-09-02 17:41:56 · 1449 阅读 · 0 评论 -
uva 11292 - Dragon of Loowater(贪心)
题目链接:uva 11292 - Dragon of Loowater题目大意:原创 2013-11-29 22:15:59 · 1193 阅读 · 0 评论 -
uva 11729 - Commando War(贪心)
题目链接:uva 11729 - Commando War题目大意:有n个人要去执行任务,第i个人交代任务的时间为Bi,了解完任务之后会不间断的执行Ji分钟,完成所有任务的最短时间。解题思路:将完成任务需要时间叫长的最先交代,所以只要排序一次然后计算最大时间就可以了。证明:对于连续的两个人x和y,可以分两种情况:1.J[x] > B[y] + J[y]时,x先的话,原创 2013-11-29 22:33:25 · 1594 阅读 · 0 评论 -
uva 11520 - Fill the Square(贪心+枚举)
题目链接:uva 11520 - Fill the Square题目大意:给出一张图,'.'的地方要用大写字母去填,要求说每个位置的上下左右如果存在的话所填的字母不能和当前位置相同。输出从上到下,从左到右字典序最小的方案。解题思路:从上到下,从左到右开始枚举,每次碰到'.'就从‘A’开始检测直到可以填入为止。#include #include const原创 2013-12-07 19:03:42 · 1252 阅读 · 0 评论 -
uvalive 3971 - Assemble(二分搜索 + 贪心)
题目连接:3971 - Assemble题目大意:有若干个零件, 每个零件给出的信息有种类, 名称, 价格, 质量, 现在给出一个金额, 要求在这个金额范围内, 将每个种类零件都买一个, 并且尽量让这些零件中质量最小的越大, 输出质量最小的值。解题思路:首先可以用二分搜索确定质量, 然后在搜索的过程中要判断这个质量是否能被满足, 判断函数可以用贪心, 在每一类的零件中选择原创 2013-08-31 17:47:58 · 2117 阅读 · 0 评论 -
uva 1368 - DNA Consensus String(贪心)
题目链接:uva 1368 - DNA Consensus String题目大意:给定m个长度为n的DNA序列,求一个DNA序列,使其到所有序列的总hamming距离尽量小,如有多解,输出最小解。解题思路:因为每个DNA序列都是相同长度的,所以可以枚举每一位DNA码,然后用贪心的思想选取出现次数最多的,如果有两个最多的,按要求用字典序小的。#include #原创 2013-12-09 21:27:07 · 1168 阅读 · 0 评论 -
uva 11039 - Building designing(贪心)
题目链接:uva 11039 - Building designing题目大意:给出n个数,均为非0数,要求选出尽量多的数组成序列,序列要求正负交替,绝对值递增。解题思路:读入时将正数与负数分别储存在两个数组,负数可以直接储存绝对值。然后将两个数组按照绝对大小分别排序,然后在两个数组中交替选出尽量小的数,满足绝对值大于前面一个选出的数。#include #in原创 2013-12-09 20:14:32 · 1324 阅读 · 0 评论 -
uva 10382 Watering Grass(贪心-区间覆盖变形)
题目大意:10382 - Watering Grass题目大意:在一个长order(目标), 宽h的草坪上有n的喷头,每个喷头有对应的半径,为它的工作范围,现在要求选出最少的喷头使的这些喷头的工作范围覆盖整个草坪。解题思路:区间覆盖问题, 这里要注意一下每个喷头的有效作用区间并不是[p - r, p+ r], 因为圆是有弧度的,所以有效区间为t = sqrt(r * r -原创 2013-08-26 09:29:05 · 1037 阅读 · 0 评论 -
uva 1346 - Songs(贪心)
题目链接:uva 1346 - Songs题目大意:John Doe 是一个著名的DJ,现在他有n首播放个曲, 每首歌曲有识别符key,歌曲长度l,以及播放频率q。想在John Doe 想将磁带上的歌曲重新排列,方便播放,播放所有歌曲有一个复杂度的计算∑(1≤i≤n)q[i] * ( ∑(1≤j≤i)l[j] ), 然后给出S,请输出重新排列后的第S首歌的识别码。解题思原创 2013-12-10 22:02:26 · 1589 阅读 · 0 评论 -
uva 10020 Minimal coverage(贪心-最小覆盖问题)
题目连接:10020 - Minimal coverage题目大意:给出一个范围M,然后给出若干的区间,以0 0 终止, 要求用最少的区间将0 ~M 覆盖,输出最少个数以及方案。解题思路:典型的区间覆盖问题,算法竞赛入门经典P154上有讲。#include #include #include using namespace std;const int N原创 2013-08-26 09:18:09 · 1863 阅读 · 0 评论 -
fzu 2111 Min Number(贪心)
题目链接:fzu 2111 Min Number题目大意:给出一个数num,然后可以进行m次交换(即可以交换不同位数上的数),使得新的数越小。(0不能放在第一位)解题思路:贪心,每次把最小的数字换到尽量前的位置,第一位特殊处理。#include #include const int N = 1005;int m;char num[N];void原创 2013-12-13 18:42:22 · 1250 阅读 · 0 评论 -
uva 10037 - Bridge(贪心)
题目链接:uva 10037 - Bridge题目大意:有n个人要过桥,每次可以过一个或两个人,但是过桥一定要有灯,现在找出过桥最短的方案。解题思路:送灯肯定要让速度最快的来送,所以就有了两种过桥方式。假设现在要让a[i-1]和a[i]过桥,方案1:a0 a1,a0,ai-1 ai, a1.方案2:a0 ai,a0,ai-1 a0,a0。比较两种方案的时间,取较少的。注意n原创 2014-01-01 17:41:39 · 1549 阅读 · 0 评论 -
uva 1153 - Keep the Customer Satisfied(贪心+优先队列)
题目链接:uva 1153 - Keep the Customer Satisfieduva题目大意:有n个客户,去买一家商场,结算时候排队,每个顾客有一个等待时间,过了等待时间顾客就会不满,然后每个顾客又有一个结算时间,问说最多让几个顾客满意。解题思路:先按照等待时间从小到大排列,然后遍历一遍,每次加上当前人的时间,如果时间超过了当前的等待时间,则减掉前面满意人当中结算时原创 2014-01-01 16:37:19 · 1718 阅读 · 0 评论 -
uva 1420 - Priest John's Busiest Day(贪心)
题目链接:uva 1420 - Priest John's Busiest Day题目大意:有一个司仪,要主持n场婚礼,给出婚礼的起始时间和终止时间,每个婚礼需要超过一半的时间做为仪式,并且仪式不能终止。问说司仪能否主持n场婚礼。解题思路:贪心,为了尽量主持多的婚礼,每场的仪式时间就一定要尽量短d=(t-s)/2+1,(因为必须大于一半,所以加1)。然后按照每场婚礼可以最早原创 2014-01-01 21:25:48 · 1644 阅读 · 0 评论 -
uva 11627 - Slalom(贪心+二分)
题目链接:uva 11627 - Slalom原创 2013-12-17 23:55:32 · 2017 阅读 · 0 评论 -
uva 11100 The Trip, 2007(贪心)
题目连接:11100 - The Trip, 2007题目大意:一群人要去旅游,有一大堆的包裹, 给出包裹的型号, 现在每个大的包裹可以装小一个小的包裹, 现在要求包裹数量最小,输出最少的包裹数量,以及嵌套方式(不唯一)。解题思路:因为每个包裹都可装小比它小的包裹,又可以被比它大的包裹装下, 所以问题酒转化成找众数, 然后遍历一下,小的要装在比它稍大一点的包裹里。原创 2013-08-24 15:40:50 · 1208 阅读 · 0 评论 -
uva 1344 - Tian Ji -- The Horse Racing(贪心)
题目链接:uva 1344 - Tian Ji -- The Horse Racing题目大意:田季要和齐王赛马,两人各有n只马,然后分别给出田季和齐王的马的速度,赢一场获得200两,输一场失去200两,平局无损失。问田季至多能赢多少。解题思路:贪心,但是用了一个很挫的方法去判断速度相等的情况。#include #include #include usi原创 2013-12-20 00:33:16 · 1806 阅读 · 0 评论 -
uva 11389 - The Bus Driver Problem(贪心)
题目链接:uva 11389 - The Bus Driver Problem题目大意:有n个司机,n条下午路线和n条晚上路线,先在要给每个司机安排一条下午路线和一条晚上路线,如果司机的工作时间超过d,则要按照每小时r元增加加班费,问最少需支付多少加班费。解题思路:贪心,下午最大的搭配晚上最小的,一次类推。#include #include #include原创 2013-12-20 13:16:19 · 1881 阅读 · 0 评论 -
uva 434 - Matty's Blocks(贪心)
题目链接:uva 434 - Matty's Blocks题目大意:给出前视图和右视图,计算出最少需要几个正方体以及至多可再增加几个正方体。解题思路:和昨天做得一题uva 1445一样的,只是增加了要计算说最多可以放几个正方体,贪心,尽量让大的当着小的。#include #include #include using namespace std;co原创 2013-12-21 13:18:50 · 1354 阅读 · 0 评论 -
fzu 2144 Shooting Game(贪心区间覆盖)
题目链接:fzu 2144 Shooting Game题目大意:在立体的空间上,有n只蚊子,给出蚊子的坐标,以及蚊子的移动方向(向量的方式给出), 然后人的攻击范围为半径为r的球体。问说人最多可以打几只蚊子,以及需要花多少时间。解题思路:对于每只蚊子计算进入攻击范围的时间和离开攻击范围的时间,注意有可能不进入攻击空间,计算区间可以设一个k然后解方程求出区间,然后对求出的区间原创 2013-12-23 00:02:48 · 1722 阅读 · 0 评论 -
uva 10366 - Faucet Flow(贪心)
题目链接:uva 10366 - Faucet Flow题目大意:给出l和r,然后从l坐标到r坐标每隔两个位置有一个档板,给出挡板的高度,然后想(-1, 1)中间加水,问什么时候会溢出。解题思路:两边先找到距离(-1,1)最近的最大值L和R,因为可能存在多个最高的挡板。接着比较两个L和R的大小,相等的话就可以比较(-l,L的下标)和(R的下标,r)两块的大小,注意L和R原创 2014-01-08 11:21:09 · 2197 阅读 · 0 评论 -
uva 10747 - Maximum Subsequence(贪心)
题目链接:10747 - Maximum Subsequence题目大意:给出n个数,从中选取k个,使得乘积最大,并且尽量使和最大。解题思路:首先按照数的绝对值大小排序。然后就要分三大类情况讨论:(1)前k个中选到0:如果选到0的话,乘积一定是0,所以尽量选大的数,让和变大。(2)前k个中选到负数的个数为偶数:这样的话直接输出答案(一定为最优解)(3)前k个中选原创 2014-01-12 22:54:32 · 1481 阅读 · 0 评论 -
uva 11269 - Setting Problems(相邻交换法)
题目链接:uva 11269 - Setting Problems题目大意:有n个任务,每个任务分为两部分s和w,分别有两个人处理,只有si做完才能做wi,问最少花费多少时间。解题思路:贪心, 相邻交换法,拿出相邻的两个人进行比较a在前的时间ta = a.s + max(a.g,b.s) + b.g;b在前的时间tb= b.s + max(b.g, a.s) + a.g原创 2014-01-12 20:37:38 · 1603 阅读 · 0 评论 -
uva 11920 - 0 s, 1 s and ? Marks(贪心)
题目链接:uva 11920 - 0 s, 1 s and ? Marks题目大意:给出一个字符串,有1,0和?组成,?可以是0也可以是1,问说该字符串的最大连续字符数的最小值。解题思路:0和1都好说,就是碰上?会难搞一点,被坑的很惨。当碰到?时,枚举出有多少个连续的?,分为奇数偶数讨论,特殊情况是1个的时候,如果前后两个字符是不同的,要比较前后的大小,选小的,相同优先选前原创 2014-01-13 22:28:41 · 1183 阅读 · 0 评论 -
uva 668 - Parliament(贪心)
题目链接:uva 668 - Parliament题目大意:给出一个n,问最多用几个不同的数组成n,如果有个数相同的,输出从小到大排序的字典序最大的。解题思路:首先找到一个序列,由2+3+...+x是恰好小于n的,然后将n - sum(x)平局分给这若干个数。#include const int N = 1005;int sum(int x) { ret原创 2014-01-14 11:12:09 · 1527 阅读 · 0 评论 -
uva 1316 - Supermarket(贪心)
题目链接:uva 1316 - Supermarket题目大意:有n件商品,对于每件商品有一个价值和有效日期,过了有效日期的商品不能再出售,每天可以卖出一件商品,问说最大利润是多少。解题思路:以前貌似做过类似的题目,贪心,按照价值从大到小排序,每次尽量让当前商品在靠近有效期的日子里卖出。#include #include #include using n原创 2014-01-22 22:29:36 · 1466 阅读 · 0 评论 -
uva 1398 - Meteor(贪心)
题目链接:uva 1398 - Meteor题目大意:给出一个w和h,表示说照相机可以照到的范围,然后有n个彗星,给出起始坐标以及移动的向量,问说一张照片最多有几个彗星。解题思路:根据坐标和移动向量求出进入范围和离开范围的时间,按照时间进行排序,然后没进一次加1,出一个减1,维护最大值,注意有可能存在彗星不进入范围。#include #include #in原创 2014-01-23 20:10:20 · 1182 阅读 · 0 评论 -
uva 10535 - Shooter(几何+最大区间覆盖)
题目链接:uva 10535 - Shooter题目大意:给出若干堵墙(线段),然后给出人的位置,问说这个人最多开枪射穿几堵墙。解题思路:最大区间覆盖问题的变形,首先把每堵墙转化成一个角度,然后计算角度区间的最大覆盖,注意:超过pi的要分成两个区间。#include #include #include #include using namespace原创 2014-01-23 21:14:46 · 1302 阅读 · 4 评论 -
uva 10755 - Garbage Heap(最大和问题)
题目连接:uva 10755 - Garbage Heap题目大意:给出一个三位矩阵,求说子矩阵和最大值。解题思路:现将各个平面上的矩阵记录下矩阵和,然后可以枚举二维上的矩阵,映射成三维去做。#include #include #include using namespace std;typedef long long ll;const int N原创 2014-01-24 23:11:45 · 1491 阅读 · 0 评论 -
uva 1467 - Installations( 贪心+暴力)
题目链接:uva 1467 - Installations题目大意:给出n个任务,每个任务有所需时间和截止时间,单个任务超过截止时间要罚款,求一个完成任务的序列,使得最大罚款和第二大罚款数之和最小。解题思路:一开始想用二分求解最大罚款值,后来发现不靠谱。首先贪心,按照任务的的截止时间排序,这是一个顾全大局的做法,这样的做法比较优,但不是最优解,有可能牺牲某个任务放在后面做会原创 2014-01-25 00:48:33 · 1924 阅读 · 0 评论