算法---贪心策略
pengwill97
C.S Master
展开
-
HDOJ.2037 今年暑假不AC (贪心)
今年暑假不AC点我挑战此题题意分析给出来n组节目的起止时间,让求出所最多能观看的完整节目个数。 贪心策略:按照节目的结束时间升序排序,比较下一项的开始时间是否比上一项的结束时间大,是的话计数器+1,并且更新结束时间,否则的话继续判断下一项。直到遍历完整个节目单,输出计数器的值即可。 注意:排好序后,默认第一个节目是看的,并且此时计数器为1。 至于为何按照结束时间排序,下面出一个一个ppt,感兴原创 2016-11-22 19:08:06 · 830 阅读 · 0 评论 -
CodeForces - 50A Domino piling (贪心+递归)
CodeForces - 50A Domino piling (贪心+递归)题意分析奇数*偶数=偶数,如果两个都为奇数,最小的奇数-1递归求解,知道两个数都为1,返回0。代码#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <sstream>#include <set>#i原创 2017-04-29 22:28:34 · 513 阅读 · 1 评论 -
CodeForces - 158B.Taxi (贪心)
CodeForces - 158B.Taxi (贪心)题意分析首先对1234的个数分别统计,4人组的直接加上即可。然后让1和3成对处理,只有2种情况,第一种是1多,就让剩下的1和2组队处理,另外一种是3多,那么结果就加上3的个数,再单独处理2. 对于1和2组队处理的讨论:首先分配2,有2种情况,一种是2正好分配完了,另外一种就2还剩下2个人(正好剩下1组)。就一起处理这个2个人和1剩下的人。 把原创 2017-04-29 22:34:07 · 371 阅读 · 0 评论 -
POJ 1017 Packets (贪心)
题意分析一家工厂生产的产品规格分为1×1, 2×2, 3×3, 4×4, 5×5, 6×6,高都是h。工厂要把它们包在6×6×h的包装袋中。工厂想让包装数尽可能少。 一开始把这道题想复杂了,其实只用考虑面积。也就是说物品的高和包装袋的高都是一样的。自然而然能想到有2种装东西的方案,一种是先装小的,再装大的;另外一种就是先装大的,再装小的。明显第一种做法不正确。原因是如果先装完小的,...原创 2018-03-07 21:35:10 · 194 阅读 · 0 评论 -
CF492C Vanya and Exams (贪心)
题意分析有一个人有n门课程,每一门课程他最多获得r学分,他只要所有课程的平均学分大等于avg ,他就可以获得奖学金每门课程,他已经获得了ai学分,剩下的每一个学分,都需要写bi篇论文才能得到,然后问你,这个人最少写多少论文才能获得奖学金按照bi降序排列,从小到大选择即可。 别问我为什么要用longlong,我是不会说的代码总览#include<bits/stdc+...原创 2018-03-07 21:51:32 · 455 阅读 · 0 评论 -
CodeForces - 570B Simple Game
题意分析给出n,m 求一个数a(1<=a<=n)使得当c在1到n的整数中随机取值时,|c-a|<|c-m| 成立的概率最大。想一下绝对值函数的图像,然后在草稿纸上手画一下即可做出来。 提示: 以2m和n的关系来作为分界点来判断代码总览#include<bits/stdc++.h>using namespace std;typedef long...原创 2018-03-07 21:56:13 · 254 阅读 · 0 评论 -
CodeForces - 546B Soldier and Badges
题意分析给出n个数,每次操作可以将一个数+1,要使这n个数都不同,至少要加多少次。sort下挨个遍历,如果当前数小于等于前一个数,则将该数++。代码总览#include<bits/stdc++.h>using namespace std;const int nmax = 3005;int num[nmax];int main(){ int n,a...原创 2018-03-07 22:00:26 · 293 阅读 · 0 评论 -
Vijos 1431 守望者的逃离(贪心+DP)
题意分析看到题DP状态还是十分好设计的。 dp[i][j]dp[i][j]dp[i][j] 表示当前时刻iii,剩余魔法jjj 所能逃离的最大距离。 状态转移方程为: dp[i][j]=max(dp[i−1][j−4],dp[i−1][j+10]+60,dp[i−1][j]+17)dp[i][j]=max(dp[i−1][j−4],dp[i−1][j+10]+60,dp[i−1][j]+...原创 2018-03-23 11:45:06 · 302 阅读 · 0 评论 -
洛谷P1004 方格取数(DP)
题意分析和P1006 差不多。 区别就是如果取走了数字,要归0,而且可以走相同的格子。 状态的定义和传纸条是一样的 。直接n4n4n^4的循环,然后就OK了。 注意如果是转移到同一个地方,那么这一个方格子的值只能加一次。代码总览#include<bits/stdc++.h>using namespace std;const int nmax = 60...原创 2018-03-24 21:34:59 · 289 阅读 · 0 评论 -
HDOJ(HDU).1864 最大报销额 (贪心)
HDOJ(HDU).1864 最大报销额题意分析题目有点问题,原题中说的单项物品的价值不得超过600元应该是单类物品的价值不能超过600元。一开始以为是01背包,后来按贪心写过了。一张一张发票处理,读入一整张发票的数据。然后检查一下里面是否有不能报销的类别(即除ABC)以外的其他类。然后看一下单类的价钱是否超过600。如都满足题目所说能够报销的要求,则把它存到b数组里面,接着对b数组按照金额降序排序原创 2017-02-20 16:15:43 · 324 阅读 · 0 评论 -
UVA.11292 Dragon of Loowater (贪心)
UVA.11292 Dragon of Loowater (贪心)题意分析题干很长,废话很多。 (实在不懂那个图片是干啥) 现在要你屠龙,有n个头直径为dra[i]的龙,有m个最多能杀掉头直径为kni[i]的勇士(1<= i <=n)。你可去雇佣骑士来杀龙,每个其实的价格为kni[i],现在求屠完所有龙的最小花费是多少,若不能屠完所有的龙, 则要输出 Loowater is doomed!。 为原创 2017-02-27 21:54:55 · 230 阅读 · 0 评论 -
贪心算法总结
贪心算法1.基本思路:即从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快的地求得更好的解。当达到某算法中的某一步不能再继续前进时,算法停止。 该算法存在问题: 1. 不能保证求得的最后解是最佳的; 2. 不能用来求最大或最小解问题; 3. 只能求满足某些约束条件的可行解的范围。 求解:去逼近目标,每一步都是最优解,最终得到最优解的集合。 停止:不能再继续前进。最优解得出不是最佳(这原创 2016-11-25 20:54:51 · 1849 阅读 · 0 评论 -
HDOJ.1009 FatMouse' Trade (贪心)
FatMouse’ Trade点我挑战题目题意分析每组数据,给出有的猫粮m与房间数n,接着有n行,分别是这个房间存放的食物和所需要的猫粮。求这组数据能保证的最大的食物是多少? (可以不完全保证这个房间的食物,及食物和猫粮可以同时乘a%) 经典的贪心策略。 先保证性价比最高的房间(花较少的猫粮可以保证最多的粮食),每组数据计算一个比率rate = 房间存放的粮食/所需要的猫粮,按照rate对其进原创 2016-11-22 19:17:44 · 486 阅读 · 2 评论 -
HDOJ.1789 Doing Homework again (贪心)
Doing Homework again点我挑战题目题意分析给出n组数据,每组数据中有每份作业的deadline和score,如果不能按期完成,则要扣相应score,求每组数据最少扣除的score是多少。 典型的贪心策略。 既然是要求最少的扣分,那么肯定是要先完成分数最多的。所以可以推出按照分数排序。那么最佳策略应该是在deadline当天完成作业,如果那天已经占用,只能在deadline-1天原创 2016-11-22 20:34:08 · 470 阅读 · 0 评论 -
HDOJ.2111 Saving HDU (贪心)
Saving HDU点我挑战题目题意分析给出来背包容量v和物品数量n,接下来n行分别给出每个商品单位体积的价值和物品总共的体积(注意是单位体积,不是每个物品)。求出最多能装多少价值的物品。 典型的贪心策略。 按单价排序,优先装单价高的,之后装单价低的。装满为止即可。最后算出总价值输出。代码总览/* Title:HDOJ.2111 Author:pengwill Date:原创 2016-11-22 21:16:10 · 1630 阅读 · 0 评论 -
HDOJ.1070 Milk(贪心)
Milk点我挑战题目题意分析每组测试数据给出一系列牛奶商品,分别是牛奶的品牌,价格,以及体积。在读取数据的时候,体积在200以下的牛奶直接忽略掉。并且每天要喝200ML的牛奶。但是无论牛奶体积有多么大,牛奶最多喝5天,也就是说每盒牛奶最多喝1000ml,当牛奶的体积不为200整数倍的时候,多余的直接扔掉不喝。现在编写程序挑选出最便宜的牛奶。 贪心策略。 最便宜的就是价钱最低,当然要计算平均某量所原创 2016-11-24 12:34:11 · 659 阅读 · 0 评论 -
HDOJ.2187 悼念512汶川大地震遇难同胞——老人是真饿了(贪心)
悼念512汶川大地震遇难同胞——老人是真饿了点我挑战题目题目分析每组数据给出所拥有的钱数,和大米的种类。每种大米给出单价(每单位重量)和大米的重量。求能买到的大米最大重量是多少? 采用贪心算法。 既然是重量最大,那么就按照每种大米的单价排序,有限购买单价小的,买完小的买大的即可。代码总览/* Title:HDOJ.2187 Author:pengwill Date:201原创 2016-11-25 15:15:11 · 751 阅读 · 0 评论 -
HDOJ.1257 最少拦截系统 (贪心)
最少拦截系统点我挑战题目题意分析一开始理解错了这道题。这么多个导弹排好序不只需要1个拦截系统吗。后来发现自己真傻。那出这个题还有啥意思,反正都需要一个。(;′⌒`) 给出n个导弹,这n个导弹的顺序是不能改变的。并且对于每个拦截系统来说,他所能打到的高度只能越来越小不能增大(或保持不变)。那么对于每个导弹来说,要先判断当前所有的导弹系统中有没有能够拦截的,如果没有的话,直接新增一个拦截系统;如果有的原创 2016-11-25 15:51:00 · 1146 阅读 · 0 评论 -
HDOJ.1800 Flying to the Mars(贪心+map)
Flying to the Mars点我挑战题目题意分析有n个人,每个人都有一定的等级,高等级的人可以交低等级的人骑扫帚,并且他们可以共用一个扫帚,问至少需要几个扫帚。 这道题与最少拦截系统有异曲同工之妙。不同在于这道题可以排序,而最少拦截系统不能排序。我们想一下,把这些人排好序,并统计每个等级的人的个数。一次从最高等级到最低等级划掉一个人(可以理解为这些人互相教并且骑一个扫帚),一直划,直到最后原创 2016-11-25 16:38:33 · 702 阅读 · 0 评论 -
HDOJ.1051 Wooden Sticks (贪心)
Wooden Sticks点我挑战题目题意分析给出T组数据,每组数据有n对数,分别代表每个木棍的长度l和重量w。第一个木棍加工需要1min的准备准备时间,对于刚刚经加工过的木棍,如果接下来的木棍l和w均小于等于上一根木棍的l和w那么就不许要准备时间,否则的话还需要1min的准备时间。求解对于每组数据,所需要的最小的准备时间是多少。 贪心策略。 对木棍进行降序排序,首要关键字是l,次要关键字是w(原创 2016-11-25 18:45:58 · 810 阅读 · 0 评论 -
JoyOI1027 木瓜地 (贪心)
代码#include <bits/stdc++.h>#define rep(i,a,b) for (int i = a; i<=b; ++i)using namespace std;const int nmax = 50;const int INF = 0x3f3f3f3f;typedef long long ll;typedef double db;int...原创 2018-05-23 13:08:04 · 541 阅读 · 0 评论