题目大意
解题思路
将N组数据的结束时间利用sort函数按照从小到大的顺序排序,优先选择在不影响前面已选择活动的同时结束时间最早的活动。
代码实现
#include<bits/stdc++.h>
using namespace std;
struct perform{
int T1; //活动开始时间
int T2; //活动结束时间
}P[101];
bool cmp(perform a,perform b)
{
return a.T2<b.T2; //将结构体数组按照结束时间从小到大排序
}
int main()
{
while(1){
int n,res=1;
cin>>n;
if(n==0)
break; //输入数据循环终止的条件
for(int i=0;i<n;i++){
cin>>P[i].T1>>P[i].T2;
}
sort(P,P+n,cmp); //调用sort函数排序
int m=0; //当前最新选择的活动序号
for(int i=1;i<n;i++){
if(P[i].T1>=P[m].T2){ //将要选择的活动开始时间与上一个已选择的活动结束时间比较,检查是否对之前的活动有影响
res++;
m=i; //如果没有影响,选择的活动数量res+1,m调整
}
}
cout<<res<<endl;
}
return 0;
}
bug
编译错误 在判断将要选择的活动对之前已选择的活动是否有影响时,应与之比较的是上一个已选择的活动而不是上一个活动