这周先看完《算法笔记》《深入浅出》《信息学奥赛一本通》上的贪心内容,然后再看的文章。这三本书上的贪心内容感觉都差不多,其中《信息学奥赛一本通》上的例题感觉很好。
看文章中的题的时候,题中也涉及到哪些问题需要用贪心来解决,比如:树的最短路径覆盖,线段上的最少点覆盖,选择先后手问题。还有些题目用贪心+某种算法(并查集,排序,枚举,优先队列,高精度)。
贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择
贪心算法基本思路(一本通上有)
1、建立数学模型描述问题
2、把求解问题分成若干子问题
3、对每个问题求解,得到子问题的局部最优解
4、把子问题的解局部最优解合成原来解问题的一个解
通过引用几道题来了解一下贪心思想
UOFTCG - Office Mates
题意:N个学生,M对朋友关系,学生只能挨着朋友,桌子排成一条直线,中间座位可空出来,求最至少需要多少张桌子
题解(贪心思想):树的最短路径覆盖
F. Family Photos
题意:n对照片,每张照片有a,b两值,a表示Alice喜悦值,b表示Bonnie喜悦值,Alice先选。所有照片都已取走或连续两轮两人都不取时游戏结束,A的幸福感为x,B的幸福感为y,打印最大x-y。
题解(贪心思想):当a1<=b2&&b1<=a2时直接忽略,当a1>b2||b1>a2时必有一方有正收益,这时不得不选择先手,其余情况正常选择
Problem D. Ice Cream Tower
题意:n个冰淇淋球,做出k个冰淇淋球,上下两球相邻且下边质量>=上面球的二倍,后面一行n个数,给出n个球的质量,求最多做出多少冰淇淋
题解:(看的题解)假设能做出x个冰淇淋,先安排上最上面那个球,贪心的思想,肯定取最小的x个,然后后面的类似取,线性扫一遍n,判断能否取x个
1821 最优集合
题意:(集合元素可以重复)优美值定义:最大的x,满足i属于[1,x],存在S的子集S0,使得S0中的元素之和为i指定集合S1和S2,从S2中选出子集S3,使得S3<=k,求S1 U S3的优美值最大。
题解:贪心+并查集
下面写一个洛谷上删数问题
贪心策略:每一步总是选择一个使剩下的数最小的数字删去,及按高位到低位的顺序搜索,若各位数字递增,则删除最后一个数字;否则删除第一个递减区间的首字符,这样删一位便形成了一个新数字串。然后回到首串,按照上述规则再删下一个数字。重复以上过程s次为止。程序框架如下:
//输入n,s;
for(int i=1;i<=s;i++)//删除s个字符
{
for(int j=0;jn[j+1])//找到第一个符合条件的
{
for(int k=j;k
这周看贪心的文章看的也不是很多,其中有些文章看的我也是有点懵。



