题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2037
简单的贪心问题,考虑到要使得看的节目数最多,即尽可能选择结束时间早的节目观看,并且需要满足该节目开始时间大于等于已看节目结束时间。
由此可以得到如下算法:
1.首先将节目单按照结束时间升序排序。
2.从结束时间最早的节目开始查找,若此节目开始时间大于等于已看节目的结束时间,就计数+1。
最终可得到结果。
#include<stdio.h>
int a[10002];
int b[10002];
void Sort(int a[], int n)
{
int i,j,tmp,tmp2;
for(i = 1; i < n; i++)
{
tmp = a[i],tmp2=b[i];
for(j = i; j > 0 && b[j-1] > tmp2; j--)
a[j] = a[j-1],b[j]=b[j-1];
a[j] = tmp,b[j]=tmp2;
}
}
int main()
{
int n,i,min=0,c=1;
while(1)
{scanf("%d",&n);
if(n==0) break;
c=1;
for(i = 0; i < n; i++)
scanf("%d%d",&a[i],&b[i]);
Sort(a,n);
for(i=1,min=b[0];i<n;i++)
{
if(a[i]>=min) min=b[i],c++;
}
printf("%d\n",c);
}
return 0;
}