基础贪心模型汇总
一.线段覆盖
题目大意:给定一堆比赛的开始时间和结束时间,询问在1-n的范围内最多能够塞下多少比赛。
解决方式:将比赛按照结束时间从小到大排序,一个一个比赛加,能加就加。
基础模型:区间问题
小练习:雷达安装
题目大意:有一根\(x\)轴,它的上面是海洋,下面(包含\(x\)轴本身)是陆地。海洋上有很多海岛,需要再在陆地上建造一些半径为某一个正整数(\(d\))的雷达去探测它们(雷达的探测范围是一个圆),问最少需要多少雷达。
解决思路:首先我们需要明确一个点:雷达是放在\(x\)轴上的(陆地只是幌子)。对于每一个岛屿(假设它的坐标是\((x,y)\)),能够探测到它的雷达的\(x\)坐标必须在这个区间之内:\([x-\sqrt{d^2-y^2},x+\sqrt{d^2-y^2}]\)(这个范围是使用两点之间距离公式计算出来的,比较基础不赘述)最后,我们将这些区间意义求出,将它们按照右端点大小进行排序,将每个雷达放在右端点,如果雷达已经在下一个区间范围内,就跳过它。
特别地,如果存在一个岛屿的纵坐标是大于\(d\)的,那么我们直接出书-1即可(无解)。
关于为什么是右端点?
很多初学者会认为区间问题求解就是要右端点,但实际上这是一个非常非常片面的想法。这道题目不仅可以用右端点从小到大排序,它也可以用左端点从大到小排序。
我们将右端点从小到大排序的原因是:我们要用现在的这个右端点去够到下一个区间的左端点。那我们自然可以用现在的这个左端点,去够下一个区间的右端点。
我们可以有两种视角:1.区间是从左向右延伸的 2.区间是从右向左延伸的
二.纪念品分组
题目大意:给出一堆数,两个物品可以分在一组或者各位一组,能分在一组的前提是它们的和不超过给定数字。询问最少分多少组。
解决思路:将最小的和最大的分在一起,第二小的和的第二大的分在一起
实现方式:排序+双指针(一个对小数的一个对大数)
基础模型:有上限限制物品两两配对最优解,最小配最大
三.排队接水
题目大意:一堆人排队接水,每个人有一个节水时长。询问如何排队能够使所有节水的等待时间最小。
解决思路:从小到大排序,每个人接水时长是前面的人的累加,让最小的人多累加,最大的人少累加。
基础模型:等待时间最小化,谁快谁先
四.陶陶摘苹果(升级版)
题目大意:给定n个苹果,力气为s。最大能够到的高度为z。每个苹果有一个需要的力气x和一个需要的高度y。
解决思路:按照需要的力气x从小到大排序,一个一个加,如果高度够不到就跳过。
基础模型:能供消耗值固定,消耗小的优先选择
五.【深基12.例1】部分背包问题
题目大意:有一堆金币,每一堆金有一个重量和一个价值。金币可以分割。给定一个整数作为重量上限,寻味能够获取到的最大价值。
解决思路:对于每堆金币,计算出它的价值与重量之比并从小到大排序,能拿多少拿多少。
基础模型:性价比贪心,当有一堆物品,你拥有的钱财数量有限,先购买性价比最高的
六.P3817 小 A 的糖果
题目大意:一堆数字,一次操作可以将一个数字减一。询问最少需要多少次操作能够使得两个相邻的数字之和不大于给定的一个整数
解决思路:使用一个循环,判断a[i]和a[i+1]的和是否大于给定整数,如果大于,先将a[i+1]减掉超出的部分,如果不够减,再考虑减a[i]
基础模型:未来最优化模型。从左到右扫描,优先减少右边元素。
另外:

浙公网安备 33010602011771号