</pre><p>本体是经典的贪心算法问题</p><p>按结束时间由小到大排序</p><p>第一个区间是一定要选的</p><p>之后 需要把所有和区间1相交的区间排除在外 并记录上一个被选的区间编号</p><p>这样 排序后只需扫描一次就可以得到正确结果</p><pre name="code" class="cpp">#include<stdio.h>
#include<stdlib.h>
struct tme
{
int st;
int ed;
};
int cmp(const void*a,const void*b)
{
return (*(tme*)a).ed>(*(tme*)b).ed?1:-1;
}
int main()
{
tme a[10010];
int m;
int i,j;
scanf("%d",&m);
while(m--)
{
int count=1;
int n;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d%d",&a[i].st,&a[i].ed);
}
qsort(a,n,sizeof(tme),cmp);
for(i=1,j=0;i<n;i++)
{
if(a[i].st>a[j].ed)
{
count++;
j=i;
}
}
printf("%d\n",count);
}
}
nyoj 14 会场安排问题
最新推荐文章于 2018-04-26 13:06:44 发布