greedy
zyz_3_14159
这个作者很懒,什么都没留下…
展开
-
LightOJ1016-Brush (II)-greedy,sort
题目大意:给你n个点和一把刷子,设刷子底部y坐标是a,那个一次刷子就可以刷掉y坐标从a到a+w的所有点,问你最少需要几次; 题目解析:我们首先要对点的y坐标进行排序,并且x坐标其实没用,所以还需要去重,所以可以用set作为他们的容器,接下来就是贪心,第一次刷子的底部肯定是与y坐标最小的那个点一样,接下来我们每次就要找这个刷子上面y坐标最小的那个点再更新刷子的底部,如此遍历即可; AC代码:原创 2016-10-10 09:56:32 · 261 阅读 · 0 评论 -
SZUOJ-大作业
世界名画陈列馆由 mx n 个陈列室组成 为防止名画被盗,需要在陈列室中设置警卫机器人哨位 每个警卫机器人除了监视它所在的陈列室外,还可监视与它所在陈列室相邻的上、下、 左、右 4 个陈列室 设计一个算法,安排警卫机器人哨位,使得名画陈列馆中每一个陈列室都在警卫机器人 的监视之下,且所用的警卫机器人最少: #include #include #include #inc原创 2016-12-27 19:16:32 · 618 阅读 · 0 评论 -
LightOJ-1198-greedy
题目大意:就是田忌赛马,赢了的2分,平了1分,输了0分,问最大问的多少分; 题目解析:首先肯定从小到大枚举自己的队员让他赢,并且赢得是惊险的(实力最接近),最关键的问题来了,什么时候该平呢?因为平局会影响后面的情况,平局肯定不如赢一局划算,所以先把平局不考虑,在考虑完了赢的情况下在遍历一遍又没有平的就可以了; AC代码: #include #include #include #include原创 2016-11-14 17:36:13 · 177 阅读 · 0 评论 -
codeforces-734C-greedy,bindary search
题目大意:有n个药剂需要制作,制作每个药剂需要x秒钟,并且最初有m的能量;魔法师现在有两种催化剂,第一种可以消耗cost1[i]的能量,使得所有药剂的所需时间变为a[i];第二种也是消耗能量,使得b[i]个数的药剂瞬间制作好;但两种催化剂每种只能最多选择一种,问最后最少需要多少时间; 题目解析:首先我们将试剂1按照cost升序,遍历一遍,便利的时候二分当前剩余能量在第二种试剂可以获得的最大收益(原创 2016-11-17 15:35:03 · 404 阅读 · 0 评论 -
codeforces-733C-greedy
题目大意:有n个怪兽排成一队,每个怪兽能吃掉与它相邻的并且体重比它小的怪兽,吃掉之后对方的体重就变成了自己的,问最后a序列是否可以变成b序列; 题目解析:首先肯定是将a序列分成连续的一段一段,然后再组合,组合的时候肯定选出一个最大值,而且在区间范围内它相邻有一个比它小的数,吃掉它就可以随便吃了接下来; AC代码: #include #include #include #include #in原创 2016-11-01 18:12:16 · 445 阅读 · 0 评论 -
POJ-3276-尺取法,greedy
题目大意:有n头牛站在一队里面,有的超前,有的朝后,先有个机器,每次操作可使连续k头牛的方向变反,要使得所有牛的方向都朝正面,问最少要操作几次,并求解k; 题目解析:我们考虑第一头牛,如果第一头牛方向是反的,那么只能取前k头牛操作,接着依次往下取牛,前面的不要管,把它当做地一头牛来看即可;如果我们使得第i头牛反向,那么后面k-1头牛也会受到牵连,所以这里很简单就想到需要用到前缀函数,这里只需要定原创 2016-11-12 21:14:20 · 480 阅读 · 0 评论 -
LightOJ1002-Country Roads -dijstra
题目大意:给你n的点,m条路,问你从第k个点到点i个所有道路中,最大值为ma,ma的最小值为多少; 题目解析:跟dijstra思路一样,都是贪心的策略,只要每次更新维护结果就好了; AC代码: #include #include #include #include #include #define inf 0x3fffffff using namespace std; int graph[5原创 2016-10-04 16:18:55 · 227 阅读 · 0 评论 -
codeforces723C- Polycarp at the Radio-greedy
题目大意:n个数,要求使得1到m出现的次数中的最小值要最大,问你是多少并最少要交换几次; 题目解析:首先那个数肯定是n/m,那么我们把map[i] (im并且stack不为空交换,icnt时也可以做交换; AC代码: #include #include #include #include #include #include using namespace std; stacks; int m原创 2016-10-04 00:34:14 · 454 阅读 · 0 评论 -
LightOJ-1048-greedy+bindary search
题目大意:给定n个数字,需要把它最多分成k段,令ans是这k段中和最大的那个数,要使得k最小,求k并且输出k段合并后的数据; 题目解析:一开始一直在想这道题目应该是区间dp,区间dp确实可以用O(n^2)的方法把它求出来,但是之后输出k段的时候发现就不太对劲了,dp的过程不会算出来这个,所以很纠结;其实假设我们取定了ans,那么我们在合并的时候应该尽可能使得和接近ans,这样才是最优的,所以这里原创 2016-10-26 23:16:52 · 350 阅读 · 0 评论 -
ZOJ1655-Transport Goods-greedy,dijkstra
题目大意:一个王国正在受侵略,周边的城市要往它这里运送物资,给你n个点和m条路,题目比较拗口,每条路都有费用,问你最后到王国的最大总重量是多少; 题目解析:首先构造成一个图,每个城市往王国运送物资肯定走费用最少的那条路,这就转化成了最长路问题,又是单源,我们就用dijkstra即可; AC代码: #include #include #include #include #include #in原创 2016-09-25 19:22:22 · 629 阅读 · 0 评论 -
ZOJ1161-Gone Fishing-greedy
题目大意:有一条单向的路,路上有n个鱼塘,可以钓鱼,每个鱼塘一开始可以钓到的鱼为fi,每次你在这个鱼塘钓完鱼的时候,这个鱼塘的fi就会减少di,问你要掉到最多的鱼的时候,在每个鱼塘所花的时间和最后钓到的鱼; 题目解析:我们可以枚举每一个鱼塘,表示结束时候的鱼塘,然后钓鱼的次数就是你的总时间减去到达这个鱼塘所花的时间,每次钓鱼的时候,我们只需要找到当前能钓到最多鱼的那个鱼塘就可以了,还要把当前钓过原创 2016-09-25 14:14:35 · 495 阅读 · 0 评论 -
LA - 4254,二分,优先队列,贪心
题目大意:有n个程序,每个程序可以在给定的时间段【l,r】中完成,可以不连续,工作量为w;问使cpu运行速度的最大值最小并且能使得所又程序完成的速度是多少? 题目解析:看到最大值最小肯定就是二分了,关键难点在于判断是否可以:首先肯定cpu一直以最大速度运行,然后需要贪心先把所有程序按照开始时间从小到大排序之后枚举每一个时间让截止时间最近的程序先完成,这就想到了要用优先队列了; AC代码: #原创 2017-03-29 19:04:05 · 415 阅读 · 0 评论