【问题描述】

  有一个国家被一条河划分为南北两部分,在南岸和北岸总共有N对城镇,每一城镇在对岸都有唯一的友好城镇。任何两个城镇都没有相同的友好城镇。每一对友好城镇都希望有一条航线来往。于是他们向政府提出了申请。由于河终年有雾。政府决定不允许有任两条航线交叉(如果两条航线交叉,将有很大机会撞船)。

  你的任务是写一个程序来帮政府官员决定他们应拨款兴建哪些航线以使得没有出现交叉的航线最多。

【输入格式】

  第一行一个整数N,表示分布在河两岸的城镇对数。接下来的N行每行有两个由空格分隔的正数C,D(C、D<=10^9〉,描述每一对友好城镇沿着河岸与西边境线的距离,C表示北岸城镇的距离而D表示南岸城镇的距离。在河的同一边,任何两个城镇的位置都是不同的。

【输出格式】

  在安全条件下能够开通的最大航线数目。

【输入样例】

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

【输出样例】

4

【数据范围】

  1<=N<=500000

这道题要求航线不可相交,可以考虑先把一岸的城市由坐标从小到大排序,再dp找与之相对应的另一个城市的坐标的最大上升序列的长度,这样就保证符合题目的要求。因为题目数据比较大,所以需用n*log2n的方法找最大上升序列的长度。

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn=500002;
int n,g[maxn];//g[k]:长度为k的上升子序列的末尾元素的最小值
//g数组保证单调上升,可以二分查找,使得时间复杂度减小
struct data
{int n,s;
};
data a[maxn];
bool cmp1(data a,data b)
{return a.n<b.n;
}int main()
{//freopen("1.txt","r",stdin);scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d %d",&a[i].n,&a[i].s);}sort(a+1,a+n+1,cmp1);int cnt=0,t=0;for(int i=1;i<=n;i++){int t=lower_bound(g+1,g+1+cnt,a[i].s)-g; //二分查找最小值if(t>cnt||g[t]>a[i].s) g[t]=a[i].s; //维护g数组cnt=max(t,cnt);}printf("%d\n",cnt);return 0;
}

航线设计 (序列DP)相关推荐

  1. 一中OJ #1438 航线设计 | LIS 序列DP | 解题报告

    一中OJ | #1438 航线设计 时限 1000MS/Case 内存 64MB/Case 题目描述 有一个国家被一条河划分为南北两部分,在南岸和北岸总共有N对城镇,每一城镇在对岸都有唯一的友好城镇. ...

  2. 【codevs1048】【codevs115406TG】石子归并、能量项链,序列dp的典型题目

    1048 石子归并 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并 ...

  3. 基于MIission planner的VTOL垂直起降固定翼航线设计方法

    基于MIission planner的VTOL垂直起降固定翼航线设计方法 在此感谢 作者 ID:小明 QQ:1228401538提供的文档帮助资料 航线设计方法一: 1. 连接飞机之前需要做的工作 1 ...

  4. 【NOIP训练】塔防游戏 序列DP / 数据结构

    题 有 n n n 座塔标号为 1−n" role="presentation" style="position: relative;">1−n ...

  5. 【训练题】航线设计 | 使用最长上升子序列(LIS)长度的O(nlogn)算法优化

    [问题描述] 有一个国家被一条河划分为南北两部分,在南岸和北岸总共有N对城镇,每一城镇在对岸都有唯一的友好城镇.任何两个城镇都没有相同的友好城镇.每一对友好城镇都希望有一条航线来往.于是他们向政府提出 ...

  6. codevs——1576 最长严格上升子序列(序列DP)

     时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解 题目描述 Description 给一个数组a1, a2 ... an,找到最长的上升降子序列ab1< ...

  7. hdu 5909 Tree Cutting——点分治(树形DP转为序列DP)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5909 点分治的话,每次要做一次树形DP:但时间应该是 siz*m2 的.可以用 FWT 变成 siz*ml ...

  8. 2014 Super Training #10 D 花生的序列 --DP

    原题: FZU 2170 http://acm.fzu.edu.cn/problem.php?pid=2170 这题确实是当时没读懂题目,连样例都没想通,所以没做了,所以还是感觉这样散漫的做不好,有些 ...

  9. 十一届蓝桥杯国赛 本质上升序列-dp

    [问题描述] 小蓝特别喜欢单调递增的事物. 在一个字符串中,如果取出若干个字符,将这些字符按照在字符串中的顺 序排列后是单调递增的,则成为这个字符串中的一个单调递增子序列. 例如,在字符串 lanqi ...

最新文章

  1. [转载]Android创世纪 - 第二天
  2. MySQL 的备份和恢复机制 MyISAM 和 Innodb
  3. Django(part15)--页面跳转
  4. [iOS]Unable to run app in Simulator
  5. 操作系统之文件管理:9、磁盘的结构与磁盘调度算法(先来先服务FCFS、最短寻找时间优先SSTF、扫描算法SCAN、循环扫描算法C-SCAN、LOOK调度算法、C-LOOK调度算法)
  6. STC单片机程序下载原理与自动下载
  7. win10下使用DuetDisplay有线/无线连接,推荐通过爱思助手(非iTunes)更新驱动
  8. 华为防火墙ssl xxx配置
  9. Revit 2019注册机
  10. d3d9.dll丢失怎么办
  11. java assert int_java中的assert(转载)2
  12. 鹅厂流出两份Android Framework技术宝典火了,完整版 PDF 限时开放下载
  13. python文档相似性比较代码_Python使用gensim计算文档相似性
  14. 神经网络之 CNN 与 RNN 再梳理
  15. Scala Class、Case Class、Object、Case Object、Trait
  16. VBS病毒(弹窗病毒)
  17. 进程和线程上下文切换
  18. Sixth season ninth episode,Ross got high blamed on Chandler so Monica‘s parents do not like him????
  19. 安卓系统开发下载和安装JRE
  20. Wed APIS-Window对象、本地存储、数组的map()方法、数组的join()方法

热门文章

  1. python turtle什么意思_python turtle的作用有什么
  2. python中from是什么意思_Python中import和from的一些事。。。
  3. 抖音小游戏推广爆火,背后有什么特点?想进圈应注意哪些方面?
  4. 85后蒋凡:28岁实现财务自由、34岁成为阿里万亿电商帝国双掌门,他的人生底层逻辑是什么?...
  5. Shade学习方法总结
  6. 图像匹配中的特征点检测之斑点检测(一)
  7. 远程控制向日葵下载与使用(巨细节)
  8. 中国大学MOOC-陈越、何钦铭-数据结构-2022春期中考试(2)
  9. 操作系统——磁盘数据块(柱面、磁头、扇区)
  10. 德国马牌联手途虎打造电动车知识课堂,“小马哥快充站”南京开讲