贪心之小结

贪心经典问题(模型)

一、背包相关的题目:

A. 最优装载问题:给出n个物体,第i个物体重量为wi。选择尽量多的物体,使得总重量不超过C。
思路:按重量从小到大排序,在总重量不超过C的情况下,每次都取剩下的重量最小的物体。
注:这类题就目前我遇到的题而言,是相对比较简单的,就不知会不会稍作变型,就变得复杂了。
相关题目:
Bookshelf:http://poj.org/problem?id=3627
B.部分背包问题:有n个物体,第i个物体的重量为wi,价值为vi。在总重量不超过C的情况下让总价值尽量高每一个物体都可以只取走一部分,价值和重量按比例计算。
思路:先求出每件物体价值和重量之比,即性价比,按性价比从大到小排序,每次取性价比最大的。
注:这类问题在背包问题中很明显的特点就是可以取走一部分而已。另外,设及除法运算要注意分母是否有可能为0。
相关题目:
Fatmouse’sTrade:http://acm.hdu.edu.cn/showproblem.php?pid=1009
C.乘船问题:有n个人,第i个人的重量为wi。每艘船的最大载重量为C,且最多只能乘两个人。用最少的船载所有人。
思路:先按重量从小到大排序,设当前最轻的人为i,最重的为j,每次先将j往左进行移动,直到i和j可以共坐一艘船,然后i+1,j-1,重复此操作。
注:这类题说实话,还没遇到过裸的题,不过做过像田忌赛马这样的题,跟这个很相似,应该也属于此类问题,只不过要更为复杂一些。
相关题目:
Ti Ji – The Horse Racing:http://acm.hdu.edu.cn/showproblem.php?pid=1052
Bin Packing:http://poj.org/problem?id=2782 (找到裸的题目了)

二、区间相关问题

A.选择不相交区间。数轴上有n个开区间(ai,bi)。选择尽量多的区间,使得这些区间两两没有公共点。
思路:先按bi从小到大排序,如果bi相同,则按ai从大到小排序,设sum=1为区间个数,然后选取第一个区间的b1为起点,找出它后面第一个ai比b1大的区间,sum++,再将bi作为新的起点,重复操作,直至遍历完所有区间。
注:这里需要考虑一个区间包含问题,事实上,区间问题都要考虑区间包含的问题,具体讲解可看紫书P232。
相关题目:
今年暑假不AC:http://acm.hdu.edu.cn/showproblem.php?pid=2037
B.区间选点问题。数轴上有n个闭区间[ai,bi]。取尽量少的点,使得每个区间内都至少有一个点(不同区间内含的点可以是同一个)。
思路:按bi从小到大排序,bi相同则按ai从大到小排序,设sum=1,选取第一个区间的b1为第一个点,找出它后面第一个ai比b1大的区间,sum++,将bi作为新的点,重复操作,直到遍历所有的区间。
注:区间包含的情况,只考虑小区间而不必考虑大区间。紫书P233讲解得很精彩,好好理解。
相关题目:
Radar Installation:http://poj.org/problem?id=1328
C.区间覆盖问题。数轴上有n个闭区间,选择尽量少的区间覆盖一条制定线段[s,t]。
思路:先按ai从小到大排序,如果第一个区间起点不是s,无解,或者所有区间终点都不为t,无解。否则,设flag为有效起点,初始flag=s,选取出起点ai<=flag的区间中bi最大的那个区间,即最长区间,取完标志为ai>flag,此时flag=bi,将bi设为新的有效起点,重复操作,直到遍历所有区间。
注:区间包含的情况,选大区间而不选小区间。紫书P233有详解,一定要理解好。
相关题目:
Cleaning Shifts:http://poj.org/problem?id=2376

三、Huffman编码

涉及了数据结构,就暂时没去学,日后再来研究,其它涉及数据结构的题也是,以后再来做。

四、其它

Yogurt Factory:http://poj.org/problem?id=2393

Packets:http://poj.org/problem?id=1017

Stripies:http://poj.org/problem?id=1862

Protecting the Flowers:http://poj.org/problem?id=3262 (AC灵感来自Fatmouse’sTrade)
Hero:http://acm.hdu.edu.cn/showproblem.php?pid=4310
注:题目中有两组数据a[n],b[n],每次输入给出a[i],b[i],单独以a或b为衡量对象去排序,去选取行不通时,可考虑用a[i]/b[i]两者之比为衡量对象(当然,还要思考一下这样行不行得通)。

电池的寿命:https://vjudge.net/contest/280796#problem/B

Codeforces——1101B_Accordion

Dice:http://poj.org/problem?id=4014
注:这道题是不可乱序的,采用结构体进行解决。

小结

贪心的题目我个人认为是挺考你的思维能力的,特别是第四类大题,不像前三类一个,有个模型可以套,更考验你的分析与思维能力(分析还考分析得周到与否,像一些数据类型,分母为0,等等一些特殊情况是否有疏漏)。因此,贪心最终要熟练掌握还要多刷题,而且应当尽可能的去学习贪心的思想,争取以不变应万变。在掌握前三种模型的同时,要格外注意第四类大题,理清为什么这么做,是从哪里获得灵感的,寻得突破口的。此外,贪心题目的问法也是很有特点的,往往有“尽量少(多)”“最多(少)”这些字眼,看到这些字时,可以考虑是否可以用贪心的思想来解决。

猜你喜欢

转载自blog.csdn.net/shamansi99/article/details/87871172
今日推荐