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

     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 
     5 using namespace std;
     6 const int N = 10010;
     7 
     8 struct City{
     9     int nor,sou;
    10 }c[N];
    11 int f[N];
    12 int n,ans;
    13 
    14 bool cmp(City a,City b)
    15 {
    16     return a.sou < b.sou; 
    17 }
    18 
    19 int main()
    20 {
    21     scanf("%d",&n);
    22     for(int i=1;i<=n;++i)
    23     {
    24         f[i] = 1;
    25         scanf("%d%d",&c[i].sou,&c[i].nor);
    26     }
    27     sort(c+1,c+n+1,cmp);
    28     for(int i=1;i<=n;++i)
    29     {
    30         for(int j=(i-1);j>=1;--j)
    31         {
    32             if(c[i].nor > c[j].nor) 
    33             f[i] = max(f[j]+1,f[i]);
    34         }
    35         ans = max(ans,f[i]);
    36     }
    37     printf("%d",ans);    
    38     return 0;
    39 }
  • 相关阅读:
    Samba文件服务器详细配置步骤
    chkconfig命令详解
    rdesktop的使用方法
    CentOs中yum安装LAMP+PHPMYADMIN
    YUM源
    Centos下设置VNC为3389端口
    vnc服务的安装与配置
    rdesktop的使用
    nginx 日志分割
    程序员私活网汇总
  • 原文地址:https://www.cnblogs.com/mjtcn/p/6849902.html
Copyright © 2011-2022 走看看