#include<stdio.h>
int main()
{
int i,n,s,s1,j,t,min;
int a[100],b[100];
while(~scanf("%d",&n))
{
if(n==0)
break;
for(i=1;i<=n;i++)
scanf("%d%d",&a[i],&b[i]);
for(i=1;i<=n;i++)
{
for(j=1;j<=n-i;j++)
{
if(b[j]>b[j+1])
{
t=b[j];
b[j]=b[j+1];
b[j+1]=t;
t=a[j];//把结束时间按从小到大排好序后,把对应的开始时间也对应排好
a[j]=a[j+1];
a[j+1]=t;
}
}
}
s=1;//第一个节目
min=b[1];
for(i=2;i<=n;i++)
{
if(a[i]>=min)
{
s++;
min=b[i];
}
}
printf("%d\n",s);
}
return 0;
}
解题关键:把结束时间从小到大的顺序排列,再把第二个节目的开始时间与第一个的结束时间比较,以次类推进行比较
(贪心问题)