「 「 「基础算法 」 」 」第 2 2 2章 贪心算法
目录:
A.奶牛晒衣服
B.雷达装置
C.畜栏预定
D.国王游戏
A . A. A. 例题 1 1 1 奶牛晒衣服
分析:
干衣所需时间是取决于最后一件烘干的衣物的所需时间
所以我们每次对剩余时间最多的衣物用烘干机
对于剩余时间最多 我们可以用一个大根堆维护 s o r t sort sort会超时
CODE:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#define reg register
using namespace std;
priority_queue<int> f; //大根堆
int n,a,b,x,t;
int main()
{
scanf("%d%d%d",&n,&a,&b);
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
f.push(x);
}
t+=a; //单独处理第一天
int k=f.top();
f.pop();
k-=b;
f.push(k);
while(1)
{
int k=f.top();
f.pop();
if(k-t<=0){
printf("%d",t/a); //总量/单价=数量
return 0;
}
k-=b; //继续贪心
f.push(k);
t+=a;
}
return 0;
}
B . B. B. 例题 2 2 2 雷达装置
分析:
如果小岛能被探测 则用结构体记录可探测第 i i i个小岛的雷达中 x x x的最小值 ( l ) (l) (l)及最大值 ( r ) (r) (r) 即区间
并将区间数组按 r r r排序 这样可以按 x x x从小往大遍历
当雷达不够了 则需添加雷达 并重新赋值
注意用勾股定理求距离 最小值 x − d i s x-dis x−dis 最大值 x + d i s x+dis x+dis
CODE:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<cmath>
#define reg register
using namespace std;
int n,d,ans=1;
struct node{
double l,r;
}a[1005];
bool cmp(node x,node y){
return x.r<y.r;}
int main()
{
scanf("%d%d",&a