高效算法——E - 贪心-- 区间覆盖
E - 贪心-- 区间覆盖
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=85904#problem/E
解题思路:
贪心思想,将问题转化为区间覆盖问题,将草地的上边界作为要覆盖的区间,计算出每个洒水器覆盖的区间范围,不能覆盖的舍去,然后将洒水器按覆盖范围的左边界升序排列。
要覆盖的最右边的点right的初始值为0,遍历洒水器,找一个能覆盖住right且覆盖范围的右边界最大的洒水器,然后将该洒水器覆盖的右边界作为新的right,重复刚才的过程,直到覆盖整个草地。
程序代码:
#include <cstdio> #include <iostream> #include <cstring> #include <cmath> #include <algorithm> using namespace std; #define MAX 10005struct node {double left, right;bool operator <(const node &a) const{return left < a.left;} }p[MAX];int n, num; double l, w;int main() {int i; // freopen("input.txt", "r", stdin);while(scanf("%d %lf %lf", &n, &l, &w) != EOF){num = 0;double po, r;for(i = 0; i < n; ++i){scanf("%lf %lf", &po, &r);if(r <= w/2) continue;double t = sqrt(r*r-w*w/4.0);p[num].left = po-t;p[num++].right = po+t;}sort(p, p+num);double left = 0, right = 0;bool flag = false;int result = 0;i = 0;if(p[0].left <= left){while(i < num){int j = i;while(j < num && left >= p[j].left){if(p[j].right > right)right = p[j].right;++j;}if(j == i) break;result++;left = right;i = j;if(left >= l){flag = true;break;}}}printf("%d\n", flag ? result : -1);}return 0; }
View Code
转载于:https://www.cnblogs.com/www-cnxcy-com/p/4705875.html
高效算法——E - 贪心-- 区间覆盖相关推荐
- 贪心 区间覆盖最小值
贪心 区间覆盖最小值 POJ 2376 大概题意: 从1到T区间内,必须保证每个点都有牛在工作,给出每头牛的工作时间,求需用到的最小的牛的数量,无解输出-1 一开始以为组合[1,4] [5,T]不算覆 ...
- 10382 - Watering Grass(贪心 区间覆盖问题)洒水面覆盖
double qiuzhi(int id) {double t1=cc[id].rid*cc[id].rid;double t2=w*w/4;double t3=t1-t2;double t4=sqr ...
- 贪心---区间覆盖问题(水题)
区间覆盖问题 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 设x1 , x2 ,-- , xn 是实直线上的n 个点. ...
- 区间覆盖全部类型及部分精选习题汇总详解(贪心策略)
内容如下: 1)区间完全覆盖问题 问题描述:给定一个长度为m的区间,再给出n条线段的起点和终点(注意这里是闭区间),求最少使用多少条线段可以将整个区间完全覆盖 样例: 区间长度8,可选的覆盖线段[2, ...
- 贪心算法简单实践 -- 分糖果、钱币找零、最多区间覆盖、哈夫曼编解码
1. 贪心算法概览 贪心算法是一种算法思想.希望能够满足限制的情况下将期望值最大化.比如:Huffman编码,Dijkstra单源最短路径问题,Kruskal最小生成树 等问题都希望满足限制的情况下用 ...
- 【算法笔记】:区间覆盖问题:贪心算法
证明贪心算法的正确性: 下面证明: (1)最优子结构: 假设结果有n个区间,去掉最后一个区间及对应的点,则前n-1个区间仍然是覆盖所有点的所用的最少区间(最优解的子结构是子问题的最优解) 证明: cu ...
- 最高效的近似算法——贪心算法
在解决一些问题的时候,有的问题要得到最优解是非常困难的.这个时候我们就不要再执着于最优解了,因为即便得到了最优解也可能是得不偿失的.采用贪心算法求解这个问题是一种折中的好方法. 所谓贪心算法就是在对问 ...
- *【UVA - 10382】Watering Grass(贪心,区间覆盖问题,思维)
题干: 题目大意: 有一块草坪,长为l,宽为w,在它的水平中心线上有n个位置可以安装喷水装置,各个位置上的喷水装置的覆盖范围为以它们自己的半径ri为圆.求出最少需要的喷水装置个数,如果无论如何都不能覆 ...
- sdut 2074 区间覆盖问题(贪心)
区间覆盖问题 Time Limit: 1000MS Memory limit: 65536K 题目描述 用i来表示x坐标轴上坐标为[i-1,i]的长度为1的区间,并给出n(1≤M≤200)个不同的整数 ...
最新文章
- 写给Linux系统运维的朋友
- Mysql数据库主从搭建
- 如何判断Javascript对象是否存在
- linux收发十六进制工具,linux下的十六进制编辑器---wxHexEdit
- 【收藏】k8s使用securityContext和sysctl
- 分数怎么化成带分数_人教版五年级下册第4单元带分数及把假分数化成整数或带分数教学视频+知识点...
- java mvc返回js_技术趋势:是什么让MVC悄然消失的?
- html语言 大全,HTML语言大全
- shell编程之 cut命令详解
- 30 分钟学 Erlang
- 学生学籍管理系统课程设计报告书
- RabbitMQ——01安装
- c语言里的函数和数学里面的函数有什么区别,计算机函数和数学函数有哪些区别和关系?...
- 2022-2028年中国仿制药产业深度调研及投资前瞻分析报告
- html模板改成织梦模板教程,织梦教程:如何用dedecms织梦模板搭建网站?
- OFD开发系列(二)-模板填充
- 龙之战神微信登录服务器,龙之战神微信登录版
- java内部模型,13 张图拆解 Java 中的内存模型
- QQ好友辅助验证不要信
- Java设计模式七大原则-开闭原则