POJ 1065

#include <iostream>
#include <algorithm>
#define MAXN  5005 
using namespace std;

struct node
{
    int l;
    int w;
    int len;
    bool lower_than(node a)
    {
        if(l < a.l || w < a.w)
        {
            return true;
        }
        return false;
    }
};

node _node[MAXN];

bool op(node a,node b)
{
    if(a.l == b.l)
    {
        return a.w < b.w;
    }
    else
    {
        return a.l < b.l;
    }
}

bool op_1(node a,node b)
{
    if(a.w == b.w)
    {
        return a.l < b.l;
    }
    else
    {
        return a.w < b.w;
    }
}

int main()
{
    //freopen("acm.acm","r",stdin);
    int test;
    int n;
    int i;
    int j;
    int max;
    cin>>test;
    while(test --)
    {
        //cin>>n;
        scanf("%d",&n);
        max = -1;
        for(i = 0; i < n; ++ i)
        {
            //cin>>_node[i].l;
            scanf("%d",&_node[i].l);
            scanf("%d",&_node[i].w);
            //cin>>_node[i].w;
            _node[i].len = 1;
        }
        sort(_node,_node+n,op);
        for(i = 0; i < n; ++ i)
        {
            for(j = 0; j < i; ++ j)
            {
                if(_node[i].lower_than(_node[j]))
                {
                    if(_node[i].len < _node[j].len + 1)
                    {
                        _node[i].len = _node[j].len + 1;
                    }
                }
            }
        }

        for(i = 0; i < n; ++ i)
        {

            if(_node[i].len > max)
            {
                max = _node[i].len;

            }
        }

        sort(_node,_node+n,op_1);
        
        for(i = 0; i < n; ++ i)
        {
            _node[i].len = 1;
        }


        for(i = 0; i < n; ++ i)
        {
            for(j = 0; j < i; ++ j)
            {
                if(_node[i].lower_than(_node[j]))
                {
                    if(_node[i].len < _node[j].len + 1)
                    {
                        _node[i].len = _node[j].len + 1;
                    }
                }
            }
        }


        int max_1 = -1;
        for(i = 0; i < n; ++ i)
        {
            if(_node[i].len > max_1)
            {
                max_1 = _node[i].len;
            }
        }
        if(max > max_1)
        {
            max = max_1;
        }
        cout<<max<<endl;
    }
}

关注我的公众号,当然,如果你对Java, Scala, Python等技术经验,以及编程日记,感兴趣的话。 

技术网站地址: vmfor.com

原文地址:https://www.cnblogs.com/gavinsp/p/4563246.html