这是杭电2037
#include <stdio.h>
int main(void)
{
int n;//n个节目
int i,j,v,out,t,min;
int sta[200],end[200];//开始时间和结束时间
while(scanf("%d",&n)!=EOF)//获得输入
{
if(n==0)
break;
for(i=0;i<n;i++)
scanf("%d %d",&sta[i],&end[i]);//获得每组节目输入
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(end[i]>end[j])
{
t=end[j];
end[j]=end[i];
end[i]=t;
v=sta[j];
sta[j]=sta[i];
sta[i]=v;
}
}
}//对结束时间进行排序
for(i=0,min=0,out=0;i<n;i++)
{
if(sta[i]>=min)
{
out++;
min=end[i];
}
}
printf("%d\n",out);
}
return 0;
}
1、这道题首先用到了排序。冒泡算法即可。先把节目终止时间排序,此时前面的开始时间不用管,因为,终止时间越靠前,剩下的时间就越多,这也是贪心算法的一部分。
2、接下来就是对开始时间的安排,因为开始时间不能在终止时间之前,所以把一切超出的排除,剩下的就是合格的,于是对合格的节目计数,输出结果就可以了。