法一:
#include <stdio.h>
#include <stdlib.h>
struct time
{
int x,y;
}ti[5001];
int cmp(const void *a,const void *b)
{
struct time*c=(struct time *)a;
struct time*d=(struct time *)b;
if(c->x!=d->x)
return c->x-d->x;
else
return c->y-d->y;
}
int main()
{
int N;
scanf("%d",&N);
while(N--)
{
int n,i,j,sum=0;
int b[5001]={0};
scanf("%d",&n);
//memset(ti,0,sizeof(ti));
for(i=0;i<n;i++)
scanf("%d%d",&ti[i].x,&ti[i].y);
qsort(ti,n,sizeof(ti[0]),cmp);
for(i=0;i<n;i++)
for(j=0;j<i;j++)//注意此处是j>i目的是为了以x
//大小为排序 如果实在是不理解可以换成j<n;然后找一组数据试试
if(!b[j] && ti[i].y>=ti[j].y)
{
ti[j].x=ti[i].x;
ti[j].y=ti[i].y;
b[i]=1;//做标记
break;
}
for(i=0;i<n;i++)
if(!b[i])
sum++;
printf("%d\n",sum);
}
return 0;
}
法二:
#include <stdio.h>
#include <stdlib.h>
#define M 5000
struct node
{
int l;
int w;
int f;
};
node s[M];
int cmp(const void *a,const void *b)
{
node *c=(node *)a;
node *d=(node *)b;
if(c->l!=d->l)
return c->l-d->l;
else
return c->w-d->w;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n,i,j;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d %d",&s[i].l,&s[i].w);
s[i].f=0;
}
qsort(s,n,sizeof(s[0]),cmp);
int ans=0;
for(i=0;i<n;i++)
{
if(s[i].f==0)
{
ans++;
s[i].f=1;
node q=s[i];
for(j=i+1;j<n;j++)
{
if(s[j].l>=q.l && s[j].w>=q.w && s[j].f!=1)
{
q=s[j];
s[j].f=1;
}
}
}
}
printf("%d\n",ans);
}
return 0;
}