贪心算法,先排序,再进行选择。按照结束时间从早到晚排序,从第一个活动开始遍历。并记录活动个数。注意,活动结束后马上可以开始下一个活动,忽略这一点会导致部分测试点错误。
#include<bits/stdc++.h>
using namespace std;
int n,ans=1;
int a[1005][3];
int sort(){
int temp;
for(int i=1;i<=n;i++){
for(int j=2;j<=n;j++){
if(a[j-1][2]>a[j][2]){
temp=a[j][2];
a[j][2]=a[j-1][2];
a[j-1][2]=temp;
temp=a[j][1];
a[j][1]=a[j-1][1];
a[j-1][1]=temp;
}
}
}
return 0;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i][1]>>a[i][2];
}
sort();//按照结束时间排序
/* cout<<"a[i]="<<endl;
for(int i=1;i<=n;i++){
cout<<a[i][1]<<" "<<a[i][2]<<endl;
}
cout<<endl;*/
int t=a[1][2];//记录最早结束的活动的end
for(int i=2;i<=n;i++){
if(a[i][1]>=t){
ans++;
t=a[i][2];
}
}
cout<<ans<<endl;
return 0;
}