渡轮问题 题解

ACM 79. 渡轮问题(最长不下降子序列dp) 79. 渡轮问题 ★☆   输入文件:maxxl.in   输出文件:maxxl.out   简单对比 时间限制:1 s   内存限制:128 MB Palmia 河在某国从东向西流过,并把该国分为南北两个部分。河的两岸各有 n 个城市,且北岸的每一个城市都与南岸的某个城市是友好城市,而且对应的关系是一一对应的。现在要求在两个友好城市之间建立一条航线,但由于天气的关系,所有航线都不能相交 阅读详情

题目描述

Palmia 河在某国从东向西流过,并把该国分为南北两个部分。河的两岸各有 N 座城市,且北岸的每一个城市都与南岸的某个城市是友好城市,而且友好关系是一一对应的。
现在要求在两个友好城市之间建立一条航线,但由于天气的原因,所有航线都不能相交,因此,就不可能给所有的友好城市建立航线。 问题:当给出城市个数和友好关系的信息之后,选择一种修建航线的方案,能建最多的航线而不相交。
在这里插入图片描述

输入格式

第1行:2个空格分开的整数XXX, YYY,表示Palmia河岸的长度,表示河的宽度
第2行:1个整数N (1≤N≤5000),表示在河两岸分别有多少座城市 接下来N行:每行2个空格分开的非负整数C、D(C,D ≤X),表示河两岸的一对友好城市从河最西端算起的坐标(C表示北岸的城市,D表示南岸的城市)
,在同一岸上没有两座城市的坐标相同。

输出格式

第1行: 最多能建立航线的数量K 接下来K行:每行2个用1个空格分开的整数,按北岸城市的坐标从小到大的顺序输出建立航线的K对友好城市的坐标。
若有多种方案,选择北岸城市(从后往前数起)编号大的那种方案

输入样例

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

输出样例

4
4 2
10 3
15 12
17 17

数据范围:
10≤X≤600010\leq X\leq 600010≤X≤6000
10≤Y≤10010\leq Y\leq 10010≤Y≤100
1≤N≤50001 \le N\le 50001≤N≤5000


我们可以把这个问题看成球最长公共子序列,因为公共子序列也满足原问题的性质,因为如果有航线交叉了就相当于公共子序列成了这个样子:

x y
 
y x

这个就是原问题中的航线交叉的情况,也不符合公共子序列的性质。

所以原问题就可以转换为求最长公共子序列。

但是我们可以通过一些操作把最长公共子序列转换成最长上升子序列:

我们可以把原数组经过一些转换把他转换成一个保持原顺序的最长上升子序列,然后求出来的最长上升子序列就是原问题的答案。

那么状态转移方程就是最长上升子序列的状态转移方程。
dp[i]=max(dp[i],dp[j]+1)dp[i]=max(dp[i], dp[j]+1)dp[i]=max(dp[i],dp[j]+1)

#include <bits/stdc++.h>
using namespace std;
#define MAXN 5005
#define INF 0x3f3f3f3f
int x, y, n;
int dp[MAXN];
bool flag[MAXN];
struct node {
    int n, s;
    bool operator <(const node &t)const {
        return n < t.n;
    }
};
node a[MAXN];
int main()
{
	cin >> x >> y >> n;
    for(int i = 1; i <= n; i++)
    	cin >> a[i].n >> a[i].s;
    sort(a + 1, a + n + 1);
    dp[1] = 1;
    int ans = 1, tmp = INF;
    for(int i = 2; i <= n; i++)
    {
        dp[i] = 1;
        for(int j = 1; j < i; j++)
            if(a[j].s < a[i].s)
                dp[i] = max(dp[i], dp[j] + 1);
        ans = max(dp[i], ans);
    }
    cout << ans << endl;
    for(int i = n; i > 0; i--)
    {
        if(dp[i] == ans && a[i].s < tmp)
        {
            ans--, tmp = a[i].s;
            flag[i] = 1;
        }
    }
    for(int i = 1; i <= n; i++)
        if(flag[i])
            cout << a[i].n << " " << a[i].s << endl;
    return 0;
}

渡轮问题(动态规划) Description   Palmia河在某国从东向西流,并把该国分成南北两个部份。河的两岸共有n个城市,且北岸的某个城市与南岸的某个城市是友好城市,而且对应的关系是一一对应。如下图:      现要求在两个友好城市之间建立一条航线,但由于天气关系,所有的航线都不能相交,因此就可能所有城市都建立航线。如上图,则最多可建立两条航线可保证航线不交叉。 Input   第一行为一个数n(n 阅读详情

相关推荐

基于动态规划对友好城市问题O(nlogn)做法的深入研究

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

PerfectPeter的博客 530

(1365): [CEOI96]渡轮问题

时间限制: 1 Sec  内存限制: 64 MB 题目描述 Palmia 河在某国从东向西流过,并把该国分为南北两个部分。河的两岸各有 N 座城市,且北岸的每一个城市都与南岸的某个城市是友好城市,而且友好关系是一一对应的。现在要求在两个友好城市之间建立一条航线,但由于天气的原因,所有航线都不能相交,因此,就不可能给所有的友好城市建立航线。 问题:当给出城市个数和友好关系的信息之后,选择一种修建...

dogeding233 841

渡轮问题代码

没有桥的时候,一般都用渡轮把汽车运过河。汽车从渡轮的一头驶入,渡轮开过河,汽车再从渡轮的另一头开出。现有一个可以装载 n 辆汽车的渡轮,它过河需要用 t 分钟,回来也要 t 分钟。 m 辆汽车按给定的时间表到达渡轮码头。现问,最早能在何时把所有的汽车都运送过河?在此时间限制内,渡轮至少开行多少个来回? 关于输入 第一行是整数 c,表示有多少组测试数据。每组测试数据的第一行为三个整数 n 、 t 、 m 。其后是 m 行整数,每个整数表示一辆汽车到达渡轮码头的时间(以从一天开始经过的分钟数计算)。渡轮可以任意开行,只是它只能装载已经达到码头的汽车。 关于输出 对于每组测试数据输出一行,其中包含两个用空格分隔的整数,第一个整数表示把最后一辆汽车运送到河对岸的时间(以从一天开始的分钟数计算),第二个整数在此时间限制内,渡轮的最少开行多少个来回。 可以假定 0 < n, t, m < 1440。每组测试数据内的汽车到达时间单调递增。 例子输入 2 2 10 10 0 10 20 30 40 50 60 70 80 90 2 10 3 10 30 40 例子输出 100 5 50 2

【例题&结论】【动规】2017&2508渡轮问题

NKOJ2508 渡轮问题(弱数据版) 时间限制 : 10000 MS 空间限制 : 65536 KB 问题描述 NK河的两岸各有N个城市,且北岸的每一个城市与南岸的某个城市是友好城市,而且对应的关系是一一对应的。现在要求在两个个友好城市之间建立一条航线,但所有航线都不能相交,因此,就不可能给所有的友好城市建立航线。问题:当城市间的友好关系建立以后,选择一种修建航线的方案,使得能建最多

ANG 1119

DP-渡轮问题-测试数据

《轮渡问题》是一道经典的DP动态题,但网上找不到正确的测试数据,现奉献测试数据和AC代码如上。 题目描述 某国家被一条河划分为南北两部分,在南岸和北岸总共有N对城市,每一城市在对岸都有唯一的友好城市,任何两个城市都没有相同的友好城市。每一对友好城市都希望有一条航线来往,于是他们向政府提出了申请。由于河终年有雾。政府决定允许开通的航线就互不交叉(如果两条航线交叉,将有很大机会撞船)。兴建哪些航线以使在安全条件下有最多航线可以被开通。 输入 第一行两个由空格分隔的整数x,y,10〈=x〈=6000,10〈=y〈=100。x表示河的长度而y表示宽。 第二行是一个整数N(1<=N<=5000),表示分布在河两岸的城市对数。接下来的N行每行有两个由空格分隔的正数C,D(C、D〈=x〉,描述每一对友好城市与河起点的距离,C表示北岸城市的距离而D表示南岸城市的距离。在河的同一边,任何两个城市的位置都是不同的。 输出 在安全条件下能够开通的最大航线数目。 样例输入 30 4 5 4 5 2 4 5 2 1 3 3 1 样例输出 3

手把手教你用certificate-manager修复Vcenter证书过期问题(附密码重置技巧)

本文详细解析了Vcenter证书过期引发的503服务不可用、密码错误等典型故障现象,并提供了使用certificate-manager工具进行系统性修复的完整步骤。文章重点阐述了证书体系原理、精准诊断方法,并分享了在SSO验证失败时通过vdcadmintool重置密码的关键技巧,帮助管理员快速恢复平台并建立预防性运维策略。

swift5iosmith的博客 459

【集训Day4 动态规划】轮船问题

轮船问题(ship) 【问题描述】 某国家被一条河划分为南北两部分,在南岸和北岸总共有N对城市,每一城市在对岸都有唯一的友好城市,任何两个城市都没有相同的友好城市。每一对友好城市都希望有一条航线来往,于是他们向政府提出了申请。由于河终年有雾。政府决定允许开通的航线就互不交叉(如果两条航线交叉,将有很大机会撞船)。兴建哪些航线以使在安全条件下有最多航线可以被开通。 【输入格式】(ship.in...

WSR的安全屋 2177

ORBSLAM3运行记录(单目+IMU)

ORBSLAM3运行记录1.单目+IMU数据集运行记录自己做的其它测试2.单目+IMU自己采集数据运行记录测试结果 1.单目+IMU数据集运行记录 ORBSLAM3没有预留ROS下单目+IMU的结点,这个需要自己去写代码添加,可以参考这篇博客,《ORBSLAM3 用ROS接口运行双目IMU和单目IMU模式》。我的ROS结点为Mono-IMU,字典文件ORBvoc.txt在ORBSLAM3 / Vocabulary文件夹中,配置文件EuRoC.yaml在ORB_SLAM3 / Examples / Monoc

yys2324826380的博客 1万+

poj 2336 Ferry Loading II—— 过河问题 贪心

Ferry Loading II Description Before bridges were common, ferries were used to transport cars across rivers. River ferries, unlike their larger cousins, run on a guide line and are powered by the river’s current. Cars drive onto the ferry from one end, the

five_east_west的博客 384

FreeSurfer安装避坑指南:从邮箱选择到环境变量设置的全流程解析

本文详细解析了在Windows系统上安装和配置FreeSurfer神经影像分析工具的全流程避坑指南。重点涵盖WSL2深度配置、软件版本选择、许可邮箱获取策略、环境变量模块化设置以及图形界面调试等关键步骤,帮助用户高效构建稳定的分析环境,避免常见安装陷阱。

weixin_29243063的博客 229

美团外卖 mtgsig 1.2 逆向工程与补环境实战指南

本文深入解析了美团外卖核心风控参数mtgsig 1.2的生成机制与逆向实战。通过拆解其复杂的JSON结构,揭示了设备指纹、环境信息加密等关键字段。重点阐述了在Node.js中模拟浏览器环境(补环境)的核心方法,包括DOM/BOM对象、本地存储及Canvas/WebGL等高级指纹的模拟技巧,为安全研究和合规自动化测试提供了一套完整的技术指南。

uber9的博客 410

面试数学趣题解析

数学趣题解析 河岸的距离 两艘轮船在同一时刻驶离河的两岸,一艘从A驶往B,另一艘从B开往A,其中一艘开得比另一艘快些,因此它们在距离较近的岸500公里处相遇。到达预定地点后,每艘船要停留15分钟,以便让乘客上下船,然后它们又返航。这两艘渡轮在距另一岸100公里处重新相遇。试问河有多宽? 分析与解答 当两艘渡轮在x点相遇时,它们距A岸500公里,此时它们走过的距离总和等于河的宽度。当

kuangxiao163的专栏 1372

使用Prophet进行时间序列预测

Prophet是Facebook开发的开源时间序列预测工具,用于处理时间序列数据的建模和预测。它建立在统计模型之上,适用于多种时间序列预测问题,具有易用性和灵活性。能够处理缺失值和异常值支持对节假日和季节性的建模可以灵活地添加自定义的季节性成分自动检测变化点提供了直观的可视化工具这个简短的教程为您提供了使用Prophet进行时间序列预测的基本步骤和一些重要的概念。您可以通过阅读Prophet官方文档和其他在线资源来进一步深入学习和了解更多细节。

Mrrunsen的博客 480

TopCoder SRM194C: IslandFerries 题解

十分坑爹,题目中写的是“当你用完一张票到其他岛屿上时,你的手中只能有0,1,2张票,所以事实上任意时刻你的手上最多能有3张票 考虑状压dp dp[i][Mask]表示当前在i号岛屿,现在手上有的票为Mask的最小代价 通过船票来进行转移即可 #include &lt;cstdio&gt; #include &lt;iostream&gt; #include &lt;cstring&gt...

IcePrincess_1968's World 275

保研考研机试攻略(满分篇):第二章——满分之路上(1)

保研考研机试攻略(满分篇):第二章——满分之路上(1)2.1计算机和基础+2.2进阶背包问题+2.3毛毛虫算法

qq_63349644的博客 1195

YOLO26涨点改进 | 全网首发Conv独家改进篇 | CVPR 2025 | YOLO26引入FDConv频率动态卷积改进,含FDC3k2二次创新,小目标检测,能够捕捉更加丰富和复杂的特征信息

本文提出了一种频率动态卷积(FDConv)模块,用于改进YOLO26目标检测模型的性能。FDConv通过在傅里叶域内划分参数预算,构建具有频率多样性的权重,有效提升了模型对低频和高频信息的处理能力。该模块包含内核空间调制(KSM)和频率带调制(FBM)两个关键组件,分别实现空间级和频域级的动态调节。实验表明,FDConv仅增加3.6M参数就能超越其他需要大幅增加参数的方法,并在目标检测、实例分割等任务中表现优异。文章详细介绍了FDConv的原理、实现方法及在YOLO26中的集成方式,提供了完整的代码实现。

Ai缝合怪、助力小伙伴高效发论文 250

ZOJ_1918 Ferry Loading II(动态规划)

Ferry Loading II Time Limit: 2000 ms Memory Limit: 65536 KB Problem Description Before bridges were common, ferries were used to transport cars across rivers. River ferries, unlike their larger cousins, run on a guide line and are powered by the river’s cu

sigh_的博客 323

【软件定义汽车】-【架构篇】-全面讲解整车电子电气架构演进

前言: 前段时间,陆陆续续写了一些电子电气架构相关的文章。这里打算再写最后一篇作为收尾,为整个系列画上句号,把坑填上,这个话题就算过去了。后续一段时间,尽量把之前文章中挖的“坑”填一下。行文逻辑将借鉴5W2H进行。 另外,本文作为一篇整合性的文章,为保证逻辑的完整性,主要是将大量过去自己文章中的内容进行梳理整合,也存在很多行业内专家的公开文章的内容,请见谅。 WHAT1:什么是汽车电子电气架构? 电子电气架构:EEA,Electrical/Electronic Architecture.

零点壹客的博客 1万+

【题解】nkoj 9061 通用的0

通用的0 nkoj 9061 对数列 ,求其最长上升(严格)子序列的长度。特别地,你可以将数列中的 替换为任意整数(可为负数),不同的 可以替换为不同的数。

Oscar17382374786的博客 663

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

美赛备赛知识图谱:2024赛题建模与O奖论文逆向工程

数学建模竞赛的核心在于将现实问题转化为可计算、可验证、可解释的系统解法。其底层逻辑涵盖问题抽象、算法适配、数据驱动验证与学术表达四维协同。在美赛(MCM/ICM)场景中,动态网格建模、时空图神经网络(ST-GNN)、模糊线性规划等进阶方法已成O奖标配,而真正区分水平的,是参数设计依据、环境实测兼容性及反事实验证能力。这些技术价值体现在森林火灾蔓延预测、共享单车调度优化、医疗资源鲁棒分配等典型赛题中,并深度绑定MATLAB/Python 2024实测环境、AMR数值稳定性、GPS噪声鲁棒性等工程细节。本文聚焦

weixin_33770878的博客 451

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

AcWing算法提高课-1.2.4友好城市

每对友好城市都向政府申请在河上开辟一条直线航道连接两个城市,但是由于河上雾太大,政府决定避免任意两条航道交叉,以避免事故。编程帮助政府做出一些批准和拒绝申请的决定,使得在保证任意两条航线不相交的情况下,被批准的申请尽量多。第2行到第n+1行,每行两个整数,中间用1个空格隔开,分别表示南岸和北岸的一对友好城市的坐标。Palmia国有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市。题目要求我们找出一种建桥方案,使得在所有建造的桥不相交的前提下,建造尽可能多的桥。求出该方案的造桥数量。

星河依旧长明的博客 213

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

友好城市-航线设置

友好城市-航线设置 Description 如下图所示,美丽的莱茵河畔,每边都分布着n个城市,两边的城市都是唯一对应的友好城市,现需要在友好城市间开通航线以加强往来,但因为莱茵河常年大雾,如果开设的航线发生交叉就有可能出现碰船的现象。现在要求尽可能多地开通航线并且使航线不能相交。 假如你是一个才华横溢的设计师,该如何设置友好城市间的航线使得航线数最大且航线不相交呢? Input 输入的第一行是一个正整数n,它表示每边分布着n个城市(1<=n<=1000)。接着是n行,每行2个正整数s和t,之间

SSB232的博客 784

【动态规划】友好城市

题目描述 一条河从东向西流过,并把魔法世界分为南北两个部分。河的两岸各有n个城市,且北岸的每一个城市都与南岸的某个城市是友好城市,而且对应的关系是一一对应的,如图所示。 现在要求在两个友好城市之间建立一条航线,但为了安全起见,所有航线都不能相交,因此,不是所有的友好城市都能建立航线。请问,最多能建多少航线? 输入 第一行两个由空格分隔的整数x,y,10≤x≤6000,10≤y≤100。x表示河的长...

qq_43690454的博客 962

[线性DP]轮渡问题(LIS应用)

题目: 有一个国家被一条河划分为南北两部分,在南岸和北岸总共有n个城镇,每一城镇在对岸都有唯一的友好城镇。任何两个城镇都没有相同的友好城镇。每一对友好城镇都希望有一条航线来往,于是他们向政府提出了申请。由于河终年有雾,政府决定不允许有任两条航线交叉(如果两条航线交叉,将有很大机会撞船)。 你的任务是编写一个程序来帮政府官员决定他们应拨款兴建哪些航线以使得没有出现交叉的航线数量最多。 输入

soundwave_的博客 2044

轮船渡口管理 C++版

/* 问题:有一个渡口,每条渡轮一次能装载10辆汽车过江,过江车辆分为客车 和货车两类,上渡轮有如下规定: (1)同类汽车先到先上船 (2)客车先于货车上船 (3)每上4辆客车才允许上一辆货车,但若等待的客车不足4辆则用货车填补, 反过来,若没有货车等待则用客车填补 (4)装满10辆后自动开船,当等待时间较长时车辆不足10辆也应人为控制发船 */ #include #inclu

sanjinjin的博客 3945

乘船问题

考虑最轻的人和最重的人是否可以在一条船上,如果最轻的和其他人的人都不能在一条船上,则每个人都需要一条船 #include<algorithm> #include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> #include<iostream> #...

zhangzhenjunaixuxin的博客 1235
上一篇: UVA11261 - Bishops
下一篇: 求组合数
codeboy7
博客等级 码龄8年 7粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值