链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=16
最长单调子序列......注意可以不是连续的
#include <iostream>
//#include<stdio.h>
#include<algorithm>
#define max( a, b ) ((a>b)?(a):(b))
using namespace std;
typedef struct
{
int l;
int w;
}zf;
int cmp(zf a,zf b)
{
return a.l<b.l;
}
zf data[1005];
int dp[1005];
int main()
{
int tem;
int t;
int n;
int i,j;
int ans;
//freopen("1.txt","r",stdin);
cin>>t;
while(t--)
{
ans=0;
cin>>n;
for(i=0;i<n;i++)
{
cin>>data[i].l>>data[i].w;
if(data[i].l<data[i].w)
{
tem=data[i].l;
data[i].l=data[i].w;
data[i].w=tem;
}
}
for(i=0;i<n;i++)
dp[i]=1;
sort(data,data+n,cmp);
for(i=n-1; i>=0; i--)
for(j=i; j<n; j++)
if(data[i].l<data[j].l&&data[i].w<data[j].w)
dp[i]=max(dp[j]+1,dp[i]);
for(i=0;i<n;i++)
if(ans<dp[i])
ans=dp[i];
cout<<ans<<endl;
}
return 0;
}