NYOJ 16 矩形嵌套

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


 

原文地址:https://www.cnblogs.com/frankM/p/4399513.html