zoukankan      html  css  js  c++  java
  • 友好城市(电路布线)

    友好城市

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 28  解决: 13
    [提交][状态][讨论版][命题人:外部导入]

    题目描述

        Palmis国有一条横贯东西的大河,何有笔直的南北两岸,岸上各有位置各不相同的N个城市。北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同。

        每对友好城市都向政府申请在河上开辟一条直线航道连接两个城市,但是由于河上雾太大,政府决定避免任意两条航道交叉,以避免事故。编程帮助政府做出一些批准和拒绝申请的决定,使得在保证任意两条航线不想交的情况下,被批准的申请尽量多。

    输入

        第1行,一个整数N(1 <= N <= 5000),表示城市数。

        第2行到第n+1行,每行两个整数,中间用1个空格隔开,分别表示南岸和北岸的一对友好城市的坐标。(0 <= xi <= 10000)

    输出

    仅一行,输出一个整数,表示政府所能批准的最多申请数。

    样例输入

    7
    22 4
    2 6
    10 3
    15 12
    9 8
    17 17
    4 2

    样例输出

    4
    

    提示

    #include<stdio.h>
    #include<string.h>
    #include<string>
    #include<iostream>
    #include<string.h>
    #include<algorithm>
    #include<vector>
    using namespace std;
    struct node
    {
        int x,y;
    }e[5005];
    bool cmp(node a,node b)
    {
        return a.x<b.x;
    }
    int dp[5005];
    int main()
    {
        int n;
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>e[i].x>>e[i].y;
            dp[i]=1;
        }
        sort(e+1,e+1+n,cmp);//先排个序
        for(int i=2;i<=n;i++)
        {
            for(int j=1;j<=i-1;j++)
            {
                if(e[i].y>e[j].y)
                {
                    dp[i]=max(dp[i],dp[j]+1);
                }
            }
        }
        int mx=0;
        for(int i=1;i<=n;i++)
        {
            mx=max(mx,dp[i]);
        }
        cout<<mx<<endl;
        return 0;
    }
  • 相关阅读:
    HDU 2717 Catch That Cow
    补题列表
    Codeforces 862C 异或!
    HDU 2084
    HDU 2037
    Codeforces 492B
    POJ 2262
    Codeforces 1037A
    HDU 1276
    itertools — Functions creating iterators for efficient looping
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/9008946.html
Copyright © 2011-2022 走看看