题目描述

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

输入格式

第1行,一个整数$N$,表示城市数。

第2行到第$N+1$行,每行两个整数,中间用一个空格隔开,分别表示南岸和北岸的一对友好城市的坐标。

输出格式

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

样例数据

输入

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

输出

  1. 4

分析

将一侧河岸的城市坐标有小到大进行排序,若其友好城市坐标是递增的,则其航道必定不相交。要求最多申请数即可转化为最长不下降子序列

代码

  1. #include <bits/stdc++.h>
  2.  
  3. #define Enter puts("")
  4. #define Space putchar(' ')
  5.  
  6. using namespace std;
  7.  
  8. typedef long long ll;
  9. typedef double Db;
  10.  
  11. inline ll Read()
  12. {
  13. ll Ans = 0;
  14. char Ch = getchar() , Las = ' ';
  15. while(!isdigit(Ch))
  16. {
  17. Las = Ch;
  18. Ch = getchar();
  19. }
  20. while(isdigit(Ch))
  21. {
  22. Ans = (Ans << 3) + (Ans << 1) + Ch - '0';
  23. Ch = getchar();
  24. }
  25. if(Las == '-')
  26. Ans = -Ans;
  27. return Ans;
  28. }
  29.  
  30. inline void Write(ll x)
  31. {
  32. if(x < 0)
  33. {
  34. x = -x;
  35. putchar('-');
  36. }
  37. if(x >= 10)
  38. Write(x / 10);
  39. putchar(x % 10 + '0');
  40. }
  41.  
  42. struct N
  43. {
  44. int South , North;
  45. }a[100001];
  46.  
  47. inline bool Cmp(N x , N y)
  48. {
  49. return x.South < y.South;
  50. }
  51.  
  52. int Dp[100001];
  53. int Maxn = -9999999;
  54.  
  55. int main()
  56. {
  57. int n;
  58. n = Read();
  59. for(int i = 1; i <= n; i++)
  60. {
  61. a[i].South = Read();
  62. a[i].North = Read();
  63. Dp[i] = 1;
  64. }
  65. sort(a + 1 , a + n + 1 , Cmp);
  66. for(int i = 2; i <= n; i++)
  67. for(int j = 1; j <= i - 1; j++)
  68. if(a[i].North > a[j].North)
  69. {
  70. Dp[i] = max(Dp[i] , Dp[j] + 1);
  71. Maxn = max(Dp[i] , Maxn);
  72. }
  73. Write(Maxn);
  74. return 0;
  75. }

P2782 友好城市(最长不下降子序列)的更多相关文章

  1. 洛谷P2782 友好城市 DP

    やはり まだあしたということは嘘でしょう.ぜんぶ忘れた( ´・ヮ・`) 所以今天就贴一道水题吧 原题>>https://www.luogu.org/problem/show?pid=278 ...

  2. P2782 友好城市

    P2782 友好城市一道伪装得很好的dp,一开始没想出来,不相交就是所有的都在右边,也就是对于当前的城市i和它的友好城市的坐标都在城市j和它的友好城市的右边,这样就转化成了求最长上升子序列,f[i]表 ...

  3. 【经典DP】洛谷 P2782 友好城市

    嘤嘤嘤,昨天两个文化课老师在上奥赛时招呼我(亲切交流),今天又要写工作报告,没时间写题解,希望今天能补上 友好城市 题目://洛谷那粘来的题面竟然能把格式粘过来 题目描述 有一条横贯东西的大河,河有笔 ...

  4. 最长不下降子序列(LIS)

    最长上升子序列.最长不下降子序列,解法差不多,就一点等于不等于的差别,我这里说最长不下降子序列的. 有两种解法. 一种是DP,很容易想到,就这样: REP(i,n) { f[i]=; FOR(j,,i ...

  5. 最长不下降子序列 O(nlogn) || 记忆化搜索

    #include<stdio.h> ] , temp[] ; int n , top ; int binary_search (int x) { ; int last = top ; in ...

  6. tyvj 1049 最长不下降子序列 n^2/nlogn

    P1049 最长不下降子序列 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 求最长不下降子序列的长度 输入格式 第一行为n,表示n个数第二行n个数 输出格式 ...

  7. 最长不下降子序列的O(n^2)算法和O(nlogn)算法

    一.简单的O(n^2)的算法 很容易想到用动态规划做.设lis[]用于保存第1~i元素元素中最长不下降序列的长度,则lis[i]=max(lis[j])+1,且num[i]>num[j],i&g ...

  8. 最长不下降子序列//序列dp

    最长不下降子序列 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 求最长不下降子序列的长度 输入格式 第一行为n,表示n个数第二行n个数 输出格式 最长不下降 ...

  9. 【tyvj】P1049 最长不下降子序列

    时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 求最长不下降子序列的长度 输入格式 第一行为n,表示n个数 第二行n个数 输出格式 最长不下降子序列的长度 测 ...

随机推荐

  1. Windows核心编程笔记之处理字符串

    0x01 ANSI 和宽字符定义 // ANSI 字符定义 CHAR varChar_1 = 'a'; // #typedef char CHAR CHAR varChar_2[] = "A ...

  2. unresolved external symbol _WinMain@16

    vc下,新建一个win32项目,就写了个main函数,打印hello ,出现了如标题所述的错误 原因: 你建立了一个WINDOWS应用程序,可是你却在入口函数的时候使用main而不是WinMain 解 ...

  3. RESTful中的PUT和PATCH实践

    先放上后台的在线API文档:SkyBlog Swagger API 在UserApi中,有这样三个接口1. PUT /users/{id} 更新用户信息2. PATCH /users/role/{id ...

  4. python 读写 HDFS

    pandas dataframe写入hdfs csv文件的两种方式: 1. from hdfs.client import Client cleint.write(hdfs_url, df.to_cs ...

  5. 10个 解放双手的 IDEA 插件,这些代码都不用写(第二弹)

    本文案例收录在 https://github.com/chengxy-nds/Springboot-Notebook 大家好,我是小富~ 鸽了很久没发文,不写文章的日子真的好惬意,每天也不用愁着写点什 ...

  6. Asp.NetCore Web开发之Nlog日志配置

    接着讲基于ASP .net Core 的web开发,这节主要讲一下如何使用和配置Nlog进行日志记录. 日志在开发中的作用是很重要的,使用日志,程序出了错误可以及时捕获并记录下来,开发人员可以通过日志 ...

  7. Java常用类详解

    目录 1. String类 1.1 String的特性 1.2 String字面量赋值的内存理解 1.3 String new方式赋值的内存理解 1.4 String 拼接字面量和变量的方式赋值 1. ...

  8. linux跨文件复制粘贴

    跨文件是这样的: 复制a.txt的第20行至第30行到b.txt中vi a.txt:2010yy:e b.txtp

  9. [bug] Container killed on request. Exit code is 143

    原因 内存不足 参考 https://blog.csdn.net/hongxiao2016/article/details/88919606 https://blog.csdn.net/Zsigner ...

  10. ]# dmesg | grep ATAcentos下查看网卡,主板,CPU,显卡,硬盘型号等硬件信息

    centos下查看网卡,主板,CPU,显卡,硬盘型号等硬件信息 osc_4o5tc4xq 2019/10/11 15:03 阅读数 253 centos下查看网卡,主板,CPU,显卡,硬盘型号等硬件信 ...