poj 1716 贪心(整数区间:2-覆盖)
来源:互联网 发布:瑞安司法淘宝网拍卖 编辑:程序博客网 时间:2024/04/28 10:01
题意:给定n个区间[pi.s,pi.t],现要选出一个数据集合S,使得每个区间至少有两个元素在S中。求集合S的最小元素个数。
思路:贪心,按照区间的末端排序。设置两个游标表示当前取得的两个数a和b。对p[i]分三种情况讨论:
1、p[i].s<=a,则不需要改变a和b,因为a和b能够覆盖p[i].a~p[i].b;
2、p[i].s>a && p[i].s<=b。b保留,再加入p[i].b。即a = b,b = p[i].t;
3、p[i].s>b。ab均不能覆盖p[i],所以更新a=p[i].t-1,b=p[i].t;
#include <stdio.h>#include <stdlib.h>#define N 10005struct node{int s,t;}p[N];int n;int cmp(const void *a,const void *b){return (*(struct node*)a).t - (*(struct node*)b).t;}int main(){freopen("a.txt","r",stdin);while(scanf("%d",&n)!=EOF){int i,a,b,res=2;for(i = 0;i<n;i++)scanf("%d %d",&p[i].s,&p[i].t);qsort(p,n,sizeof(struct node),cmp);a = p[0].t-1;b = p[0].t;for(i = 1;i<n;i++){if(p[i].s <= a)continue;if(p[i].s <= b){a = b;b = p[i].t;res++;}else if(p[i].s > b){a = p[i].t-1;b = p[i].t;res += 2;}}printf("%d\n",res);}return 0;}
0 0
- poj 1716 贪心(整数区间:2-覆盖)
- POJ 1328 区间覆盖 贪心
- poj 2376 贪心(区间覆盖)
- POJ 1089 Intervals 区间覆盖+ 贪心
- poj 1089 贪心之区间覆盖问题
- poj 2376 贪心(覆盖区间)
- poj 2376 贪心 区间覆盖问题
- (水)POJ-2376 区间贪心,区间覆盖
- 贪心之区间覆盖
- 贪心区间覆盖--poj2378
- 区间覆盖问题【贪心】
- 区间覆盖问题 贪心
- 贪心 区间覆盖问题
- 区间覆盖问题(贪心)
- nyoj+区间覆盖贪心
- 区间覆盖 贪心 小结
- 贪心 区间覆盖问题
- 【贪心】[区间覆盖]nyoj12
- Timer理解
- LeetCode 148 Add Two Numbers
- 天使之所以会飞翔,是因为她把自己看的很轻
- 动态代理机制
- win7/win8 64位连接32位PLSQL_Developer oracle 11g
- poj 1716 贪心(整数区间:2-覆盖)
- MySQL5.5源代码安装
- Hibernate Session 的生命周期
- 图解linux内核启动流程(bootloadr->kernel)
- 【记录】Ubuntu下嵌入式开发环境搭建之使用MiniTools下载裸机程序
- Ogre学习记录(二)-RaySceneQuery
- FPGA之基于FPGA的SPARK多核处理器设计(三)
- HDU 1166 排兵布阵(线段树)
- Spring IO Platform