基本思路:
1.先调整长宽(比如宽存为a,长存为b)
2.确定矩形大小关系,进行排序
3.找出矩形数组的最长单调递增子序列
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct Rect{
int a;
int b;
}s[1005];
int dp[1005];
int cmp(const void*a,const void*b){
struct Rect*c=(Rect*)a;
struct Rect*d=(Rect*)b;
if(c->a!=d->a) return c->a-d->a;
else return c->b-d->b;
}
int cmp1(const void *a,const void *b){
return *(int *)a-*(int *)b;
}
int main(){
int N,n,i,x,y;
scanf("%d",&N);
while(N--){
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d%d",&x,&y);
s[i].a=(x<y?x:y);
s[i].b=(x>y?x:y);
}
qsort(s,n,sizeof(s[0]),cmp);
dp[0]=1;
int max;
for(int i=1;i<n;i++){
max=0;
for(int j=i-1;j>=0;j--){
if(s[i].a>s[j].a&&s[i].b>s[j].b&&max<dp[j]){
max=dp[j];
}
}
dp[i]=max+1;
}
qsort(dp,n,sizeof(int),cmp1);
printf("%d\n",dp[n-1]);
}
return 0;
}