#10000. 「一本通 1.1 例 1」活动安排
内存限制:512 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:文本比较
上传者: 1bentong
题目描述
设有 nnn 个活动的集合 E={1,2,..,n}E=\{1,2,..,n\}E={1,2,..,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动 iii 都有一个要求使用该资源的起始时间 sis_isi 和一个结束时间 fif_ifi,且 si<fis_i<f_isi<fi。如果选择了活动 iii ,则它在时间区间 [si,fi)[s_i,f_i)[si,fi) 内占用资源。若区间 [si,fi)[si,fi)[si,fi) 与区间 [sj,fj)[s_j,f_j)[sj,fj) 不相交,则称活动 iii 与活动 jjj 是相容的。也就是说,当 fi≤sjfi \leq sjfi≤sj 或 fj≤sif_j \leq s_ifj≤si 时,活动 iii 与活动 jjj 相容。选择出由互相兼容的活动组成的最大集合。
输入格式
第一行一个整数 nnn;
接下来的 nnn 行,每行两个整数 sis_isi 和 fif_ifi。
输出格式
输出互相兼容的最大活动个数。
样例
样例输入
4
1 3
4 6
2 5
1 7
样例输出
2
数据范围与提示
1≤n≤10001 \leq n \leq 10001≤n≤1000
1 //2018-07-27 20:12:12 2 #include <iostream> 3 #include <cstdio> 4 #include <algorithm> 5 using namespace std; 6 7 const int N = 10001; 8 int n; 9 struct node{ 10 int st, ed; 11 }a[N]; 12 13 bool cmp(node a, node b){ 14 return a.ed < b.ed; 15 } 16 17 int main(){ 18 scanf("%d", &n); 19 for(int i=1; i<=n; i++) 20 scanf("%d%d", &a[i].st, &a[i].ed); 21 sort(a+1, a+n+1, cmp); 22 int t = a[1].ed; 23 int ans = 1; 24 for(int i=2; i<=n; i++) 25 if(a[i].st >= t){ 26 ans++; 27 t = a[i].ed; 28 } 29 printf("%d\n", ans); 30 31 return 0; 32 }