贪心(二)
来源:互联网 发布:如何检测网络丢包 编辑:程序博客网 时间:2024/06/07 01:40
区间选点
学长原创:Click Here~
题目重述:
给n个闭区间[a,b]。取尽量少的点,使得每个区间都至少有一个点(不同区间内含的点可以是同一个).
算法分析:
给b从小到大排序(b相同,则a从大到小)。从前往后遍历,当遇到新的区间时候,把这个区间的b作为新的区间的结束点。
出现的情况,总共会有两种。
一、一个区间被另一个区间所包含。则此时我们可以选择小的区间([a1,b1]),因为小的区间所包含的点一定会被大区间包含,而大区间包含的点不一定会被小区间所包含。(如,图一)
二、两个区间没有包含关系。则,此时一定有a1 >= a2 >= a3....因为显然选择它的右端点是明智的。因为它比前面的点能覆盖更大的范围。([A1,B1])。(如,图二)
#include <stdio.h>#include <algorithm>using namespace std;struct Extent{ int a,b; bool operator < (const Extent& S)const { return b < S.b || b == S.b && a > S.a; }}A[10002];int main(){ int z,n,cnt,end; scanf("%d",&z); while(z--) { cnt = 0; end = -1; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d%d",&A[i].a,&A[i].b); sort(A,A+n); for(int i=0;i<n;i++) { if(end < A[i].a) { end = A[i].b; cnt++; } } printf("%d\n",cnt); }return 0;}
题目链接:Click Here ~
#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <cmath>using namespace std;const int N = 1e3 + 5;struct Point{ double a,b; bool operator < (const Point tmp)const { if(a != tmp.a) return a < tmp.a; return b < tmp.b; }};Point p[N];int Find(int n){ int num = 1; double cur = p[0].b; for(int i = 1;i < n;++i) { if(p[i].a - cur > 1e-5) //p[i].a > cur { num++; cur = p[i].b; }else { if(p[i].b - cur < 1e-5) // cur > p[i].b cur = p[i].b; } } return num;}int main(){ int n,d,kase = 1; while(scanf("%d%d",&n,&d),(n||d)) { bool flag = false; double x,y,tmp; for(int i = 0;i < n;++i){ scanf("%lf%lf",&x,&y); tmp = sqrt(d*d-y*y); p[i].a = x - tmp; p[i].b = x + tmp; if(y > d) flag = true; } sort(p,p+n); if(flag){ printf("Case %d: -1\n",kase++); continue; } int res = Find(n); printf("Case %d: %d\n",kase++,res); } return 0;}
3 0
- 贪心(二)
- 喷水装置(二) 贪心
- 贪心算法基础(二)
- 贪心算法知识(二)
- 算法二(贪心算法)
- NYOJ 喷水装置(二) (贪心)
- nyoj12-喷水装置(二)(贪心)
- 贪心nyoj12 喷水装置(二)
- 【喷水装置(二) 区间覆盖 贪心。】
- NYOJ 喷水装置(二)贪心
- NYOJ12 喷水装置(二)【贪心】
- NYOJ12 喷水装置(二)【贪心】
- nyoj12 喷水装置(二)贪心
- NYOJ-----12---喷水装置(二)贪心
- 贪心算法--喷水装置(二)
- nyoj喷水装置(二)【贪心】
- 喷水装置(二) 区间长度贪心
- NYOJ12 喷水装置(二)(贪心)
- 寒假第三天--栈和队列--数据结构实验之栈四:括号匹配 (数组)
- Hibernate JPA 中配置Ehcache二级缓存
- POJ 2762 证明是否为单向连通图 强连通缩点+类拓扑排序
- Merge Two Sorted Lists
- 让 CentOS 启动时不启动桌面服务
- 贪心(二)
- 寒假第三天--栈和队列--数据结构实验之栈四:括号匹配 (栈)
- oracle中的错误信息
- OutLook 2010提示: 附件大小超过了允许的范围
- linux 中 set,env,export,declare显示shell变量的区别
- substring, split 方法
- Java正则表达式中的十大问题
- Jenkins搭建.NET自动编译测试与发布环境
- 寒假第三天--栈和队列--数据结构实验之栈二:一般算术表达式转换成后缀式