要点:
1.先进行排序,在用lis。lis倒不是问题,用n^2的就行了,但二维数组的快排搞了一个晚上,总是出错,最后还是先弄明白了二维数组的快排才AC的
#include<stdio.h>
#include<stdlib.h>
int ans[100000];
struct node
{
int x,y;
};
node a[10000];
int cmp(const void*p1,const void*p2)
{
struct node*c=(node*)p1;
struct node*d=(node*)p2;
if(c->x!=d->x)
return c->x-d->x;
else
return c->y-d->y;//第一列相同时从小到大排列
int main()
{
int n,i,j,max;
while (scanf("%d", &n) != EOF)
{
max = 0;
if (n == 0)
{
printf("*\n");
break;
}
for (i = 0; i < n; i++)
{
scanf("%d%d", &a[i].x, &a[i].y);
ans[i] = 1;
}
qsort(a, n, sizeof(node), cmp);
for (i = 0; i < n; i++)
{
for (j = 0; j < i; j++)
if (a[i].x >= a[j].x&&a[i].y >= a[j].y)
if(ans[j]+1>ans[i])
ans[i] = ans[j] + 1;
if (ans[i] > max)
max = ans[i];
}
printf("%d\n", max);
}
return 0;
}