贪心
1070. Mooncake (25)-PAT甲级真题
1037. Magic Coupon (25)-PAT甲级真题
1038. Recover the Smallest Number (30)-PAT甲级真题
1067. Sort with Swap(0,*) (25)-PAT甲级真题
1033. To Fill or Not to Fill (25)-PAT甲级真题
分析
贪心是一种思想,也是一种策略,贪心算法作为算法题中一大类,出题比较灵活。
pat为难你的地方,或者至少需要掌握的点, 解题流程:
1,首先判断这是一道贪心题?一般有字眼,最优值啥的。动态规划和贪心可以举
反例区别。或者根据经验。经验的前提是你要做大量习题。否则很难识别出。
2, 快速找出贪心策略
3, 模拟过程
pat上在2,3处为难你。比如p1033
题目难度:
p1070<p1037<p1038<p1067<p1033
p1070
题目大意:N表示月饼种类,D表示月饼的市场最大需求量,给出每种月饼的数量和总
价,问根据市场最大需求量,这些月饼的最大销售利润为多少~
分析:这是一道贪心入门题,同时也是一道经典题。
1, 使用贪心
2, 求出这N种月饼单价,根据单价进行排序,优先选用单价高的月饼。
每次购买月饼,累加利润值,直到购买的月饼量等于需求量。输出最后的
利润值即可~
p1037
题目大意:给出两个数字序列,从这两个序列中分别选取相同数量的元素
进行一对一相乘,问能得到的乘积之和最大为多少~
分析:将这两序列从大到小排序, 将两个序列中全为正数的数字对应相乘。(从前往
后)。将两个序列中全为负数的数字对应相乘。(从后往前)。定义一个ans,在每次
乘的过程中,将乘积累加到ans上。最后输出结果。
p1038
题目大意: 给你n个数字串,让你将这n个数字串连接,组成一个最小的数字。
(据说此题来自一道面试题改编)
分析: 拿到这道题,首先我手动模拟了样例。原先以为贪心思路是这样的: 站在当
前状态选择下一个最好的状态。大部分贪心思路都是这样。然后发现越分类越复杂。
之后看了题解,说对字符串数组进行排序。排序的原则是: 定义了一种新的运算
op(a, b) : if(a+b>b+a), 那么a排在前面。否则b排在前面。 显然用cmp算法很
容易写出来。所以贪心的思路和前面有点区别:这里一次排序,排序后的结果就是
我们的选择顺序。
注意: 前导零
测试点2大致是:3 000 0000 0001这种
p1067
题目大意:给出一个n个数的序列,数字为0~n-1的乱序,每次用两两交换的方式
而且只能用0和另一个数交换,使序列变成有序的,问最少需要多少步。
分析: 出的很不错的题。
如果0不在正确位置, 我们就把0所在的位置换成还有正确数字
如果0在正确位置,那么判断有没有不在正确位置的数字,如果没有,
那么break。 否则挑出第一个不在正确位置上的数字(实际上选择其他
不在正确位置的数字也可以,笔者手动模拟了这个过程,结果都一样)。
注意:第一次运行时有两个测试点超时,因为我每次都是1开始找不在正确位置上的
数字。这个地方可以优化:因为对于那些在正确位置上的数字之后过程中不会被优
化,所以每次查找不在正确位置上的数字时,可以从上一次查找位置出发。
理由再重复一遍: 因为从1到上一次查找位置间的数字都已经在正确位置上。
p1033
题目大意: 从A城市车出发开车前往B城市。路程为S, 两城市之间有N个加油站,
给出每个加油站距离城市A的距离, 以及各自的每升汽油价格。 已知车子能容纳
capacity升汽油,每升汽油可以跑unit_dis距离。 问你如何加油最省钱。若能到
达
终点,那么输出花费值。如果不能到达,那么输出能到达的最大距离。
分析: 本题有两个难点, 1是贪心策略不容易找到。2是过程模拟复杂。
1, 贪心策略:
假设当前加油站是now_id, 那么按如下原则选择下一个加油站next_id。
从当前加油站出发的可以到达范围内的加油站,
如果存在比当前加油站价格低的加油站
那么选取距离最近的加油站。
如果有加油站但不存在价格相对较低的加油站
那么跳出一个价格最低的。
如果不存在这样的加油站。
那么判断终点是否可达
若不可达,那么输出最大距离
若可达,那么输出最小花费
2,过程模拟,敲之前要思路清晰,如果不清晰不妨写伪代码。过一遍,否则
这种题可能越敲越乱。
测试点2大致是这样的:当前加油站能够到达终点, 在这两者之间有多个加油
站,并且距离终点越近,那么加油站汽油价格越贵。
pat贪心上出的最好的一道题。
小结
pat上贪心题,实际上贪心形式多样,不像图之类算法套路固定。需要多练习,
多总结,多类比。 做到:
1, 快速认出这个可以用贪心来做
2, 快速找出贪心策略
3, 使用条件循环语句快速写出过程模拟
这也是一个求解贪心题所要经历的三步。贪心策略往往要用到排序,但贪心难点
不在这里。