链接: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; }