zoukankan      html  css  js  c++  java
  • P2782 友好城市

    题目背景

    题目描述

    有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市。北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同。没对友好城市都向政府申请在河上开辟一条直线航道连接两个城市,但是由于河上雾太大,政府决定避免任意两条航道交叉,以避免事故。编程帮助政府做出一些批准和拒绝申请的决定,使得在保证任意两条航道不相交的情况下,被批准的申请尽量多。

    输入输出格式

    输入格式:

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

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

    输出格式:

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

    输入输出样例

    输入样例#1:
    7
    22 4
    2 6
    10 3
    15 12
    9 8
    17 17
    4 2
    输出样例#1:
    4

    说明

    1<=N<=5000,0<=xi<=10000

    按北边从小到大的顺序排序

    再求出南边的最长上升序列就可以

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 using namespace std;
     5 const int MAXN=5001;
     6 struct node
     7 {
     8     int north;
     9     int south;
    10 }a[MAXN];
    11 int comp(const node & a ,const node & b)
    12 {
    13     return a.north<b.north;
    14 }
    15 int ans[MAXN];
    16 int main()
    17 {
    18     int n;
    19     scanf("%d",&n);
    20     for(int i=1;i<=n;i++)
    21         scanf("%d%d",&a[i].north,&a[i].south);
    22     sort(a+1,a+n+1,comp);
    23     for(int i=1;i<=n;i++)
    24     {
    25         for(int j=1;j<=i-1;j++)
    26         {
    27             if(a[j].south<a[j+1].south)
    28             {
    29                 ans[i]=max(ans[i],ans[j]+1);
    30             }
    31         }
    32     }
    33     printf("%d",ans[n]+1);
    34     return 0;
    35 }
  • 相关阅读:
    C# MVC跳转
    从字符串中提取数字
    使用Node.js+Socket.IO搭建WebSocket实时应用
    C# 计算当前时间距离今晚00:00:00还有多少分多少秒
    C#错误异常列表
    HTTP请求报文和HTTP响应报文
    Selenium2(webdirver)入门之环境搭建(Java版)
    mysql grant ,User,revoke
    mysql 用drop和delete方法删除用户的区别
    [MySQL]
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/6763977.html
Copyright © 2011-2022 走看看