贪心

贪心

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, 使用条件循环语句快速写出过程模拟
这也是一个求解贪心题所要经历的三步。贪心策略往往要用到排序,但贪心难点
不在这里。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值