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

     哇,考到原题了23333

    按照一边排序,然后求另一边的最长上升子序列

     1 //友好城市 
     2 
     3 #include<cstdio>
     4 #include<cmath>
     5 #include<algorithm>
     6 using namespace std;
     7 
     8 const int N=5004;
     9 
    10 int f[N];
    11 struct node{
    12     int n,s;
    13 }a[N];
    14 
    15 int b,c;
    16 
    17 bool cmp(node q,node p)
    18 {
    19     if(p.n>q.n)return 1;
    20     else return 0; 
    21 } 
    22  
    23 int main()
    24 {
    25     int n;
    26     
    27     scanf("%d",&n);
    28     for(int i=1;i<=n;i++)
    29     {
    30         scanf("%d%d",&a[i].n,&a[i].s);
    31         f[i]=1;
    32     }
    33 
    34     
    35     sort(a+1,a+n+1,cmp);
    36     int ans=0;
    37     for(int i=2;i<=n;i++)
    38     {
    39         for(int j=i-1;j>=1;j--)
    40         {
    41             if(a[i].s>a[j].s)
    42             f[i]=max(f[j]+1,f[i]);
    43         }
    44         if(f[i]>ans)ans=f[i];
    45     }
    46     printf("%d",max(f[1],ans));
    47     
    48 
    49     return 0;
    50 }

     

  • 相关阅读:
    122. Best Time to Buy and Sell Stock II
    121. Best Time to Buy and Sell Stock
    72. Edit Distance
    583. Delete Operation for Two Strings
    582. Kill Process
    indexDB基本用法
    浏览器的渲染原理
    js实现txt/excel文件下载
    git 常用命令
    nginx进入 配置目录时
  • 原文地址:https://www.cnblogs.com/sssy/p/6850225.html
Copyright © 2011-2022 走看看