学习总结:贪心算法

这几周通过课上的学习和课下的训练,总结一下对贪心算法问题的分析和使
用。

一、贪心算法的基本思路:

(1)先读懂题,英语阅读理解max,搞清输入输出的具体要求;
(2)模拟,用最基本的的思路思考整个问题;
(3)优化算法:用算法的思想简化优化;
(4)多角度灵活思考:正难反易、复杂问题=简单问题+限定条件;
(5)参考经典例题,回归经典例题;
(6)一些数学归纳方法也很重要;

二、编写过程中的几个注意事项:

1.万能头文件:
怎么省事怎么来
(1)#include <bits/stdc++.h>
(2)
#include
#include <string.h>
#include <stdio.h>
#include
#include
#include
#include
#include <math.h>
#include //有些情况下(1)无法使用;
2.开区间并置零;
置零太重要了,忘了就要出事(血泪教训);
memset函数:memset(a,0,sizeof(a));//注意头文件#include <string.h>;
3.排序:
贪心算法不排序是不可能的
(1)冒泡和简单选择是什么鬼;
(2)sort排序太重要了;
sort(a,a+n,cmp);//注意vector数组:sort(a.begin(),a.end(),cmp);千万不要弄错;
(3)优先队列、set等等使用较少;//说来说去还是sort好;
4…输入输出:
就不细说了,用scanf和printf就对了;
5.不要将问题想的太复杂,自己瞎折腾;

三、经典好题:

1.博弈问题,两种最优

题意:学生给学生会主席提出n个提案,筛选通过p个,这P个提案主席可接受k个拒绝p-k个。每个提案都有相应的“劳累值”和“拒绝后的领导不满意度”。
学生:优先选择劳累度最大的提案,劳累度相同选择拒绝后的领导不满意度最高的提案;
主席:优先拒绝拒绝后的领导不满意度最小的提案,拒绝后的领导不满意度最小相同拒绝劳累度最高的提案;
要求:提出p个方案,使让学生会主席劳累值最大,而且他拒绝的p-k个提案使领导不满意度最大。

分析:
现将主席最希望接受的n-p个提案排除,再选出k个对己方最有利的提案,最后选出p-k个主席不得不拒绝的提案。
1)先按照“满意度”升序,“满意度”一致的情况下,按照“劳累值”降序,前n-p个提案主席一定会拒绝,所以我们不选。
2)在已经通过的p个里面,选出一定通过的k个方案。还先按照“劳累值”降序,再让相同“劳累值”下“满意度”降序。
3)剩下的p-k个提案选不满意度最大的,保证主席一定拒绝。

2.区间选择:

题意: xoy平面上,x轴的上方是岛屿,x轴上有雷达,给出岛屿坐标,能够把所有岛检测到而且需要最少数量的雷达,求这个最小数量。

分析:
这个题重在转化,记忆深刻:
1)以每一个岛屿为圆心以输入r为半径做圆,设其与x轴交点为x1,x2(x1<x2),找到区间,在这个范围内必然存在一个雷达可以检测到这个岛;
2)同样的方法找出所有区间,并按照x2升序,若x2相等则x1升序的规则将所有区间排序;
3)定位、前后比较;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值