题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=14
解题思路:按活动结束时间从小到大排序,优先选择小的,显然,第一个活动一定被选,按顺序依次判断下一个活动的开始时间是否大于当前被选的最后一个活动的结束时间,若是,选之,否则,跳过。
1 #include<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 using namespace std; 5 6 struct T{ 7 int Bi,Ei; 8 bool operator <(const T &a) const{ 9 return Ei<a.Ei; 10 } 11 }t[10005]; 12 13 int main(){ 14 int m,n,i; 15 scanf("%d",&m); 16 while(m--){ 17 scanf("%d",&n); 18 for(i=0;i<n;i++) scanf("%d%d",&t[i].Bi,&t[i].Ei); 19 sort(t,t+n); 20 int num=1,Max=t[0].Ei; 21 for(i=1;i<n;i++){ 22 if(t[i].Bi>Max){ 23 num++; 24 Max=t[i].Ei; 25 } 26 } 27 printf("%d ",num); 28 } 29 return 0; 30 }