题目:
输入数据包含多个测试实例,每个测试实例的第一行只有一个整数n(n<=100),表示你喜欢看的节目的总数,然后是n行数据,每行包括两个数据Ti_s,Ti_e (1<=i<=n),分别表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。n=0表示输入结束,不做处理。
题解:
对结束时间进行排序,然后贪心,因为如果结束的晚的节目都能安排上,那么结束的早的一定可以安排上。
#include <iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
struct note{
int x,y;
};
note a[1000];
bool cmp(note a,note b)
{
return a.y<b.y;
}
int main()
{
int ans,n;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
break;
for(int i=0;i<n;i++)
{
scanf("%d%d",&a[i].x,&a[i].y);
}
sort(a,a+n-1,cmp);
int ant=a[0].y;
ans=0;
for(int i=0;i<n-1;i++)
{
if(ant<=a[i+1].x)
{
ans++;
ant=a[i+1].y;
}
}
printf("%d\n",ans+1);
}
//cout << "Hello world!" << endl;
return 0;
}