贪心算法-区间问题

已知N个事件的发生时刻和结束时刻(见下表,表中事件已按结束时刻升序排序)。一些在时间上没有重叠的事件,可以构成一个事件序列,如事件
{2,8,10}。事件序列包含的事件数目,称为该事件序列的长度。请编程找出一个最长的事件序列。

image

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include<iostream>
#include<queue>
#include<stack>
#include<algorithm>
#define MAXN 100
using namespace std;
int main(){
pair<int,int> inv[MAXN];
int n,T[100],S[100];
cin>>n;
for(int i=0;i<n;i++)
cin>>S[i];
for(int i=0;i<n;i++)
cin>>T[i];
for(int i=0;i<n;i++)
{
inv[i].first=T[i];
inv[i].second=S[i];
}
sort(inv,inv+n);
int ans=0,t=0;
//t是最后工作的结束时间
for(int i=0;i<n;i++){
if(t<inv[i].second)
{
t=inv[i].first;
ans++;
}
}
cout<<ans<<endl;
return 0;
}

image