赞
踩
已知N个事件的发生时刻和结束时刻(见下表,表中事件已按结束时刻升序排序)。一些在时间上没有重叠的事件,可以构成一个事件序列,如事件{2,8,10}。事件序列包含的事件数目,称为该事件序列的长度。请编程找出一个最长的事件序列。
输入:第一行为事件的个数N,以下共输入N行,每一行都有两个整数构成,第一个整数为事件开始时间,第二个整数为事件结束时间,时间的编号为其所在的行数(从0开始计数)。
输出:输出一个最长的时间序列
输入示例:
12
1 3
3 4
0 7
3 8
2 9
5 10
6 12
4 14
10 15
8 18
15 19
15 20
输出示例:
0 1 5 8 10
- #include <iostream>
- #include <string.h>
- using namespace std;
-
- int used[100]; //是否选取该区间
- int begin[100];
- int end[100];
-
- int main(){
- int N;
- int i,j;
- cin>>N;
-
- memset(used,0,sizeof(used));
- for(i=0;i<N*2;i++){
- if(i%2==0)
- cin>>begin[i/2];
- else
- cin>>end[i/2];
- }
- used[0]=1;
- j=0;
- for(i=1;i<N;i++){
- if(end[j]<=begin[i]){
- used[i]=1;
- j=i;
- }
- }
-
- for(i=0;i<N;i++){
- if(used[i])
- cout<<i<<" ";
- }
- return 0;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。