友好城市dp
//
// Created by Arc on 2020/4/27.
//对了,这篇题解的代码是小白自己写的.有啥错误还请各位大佬多多包涵. /*
* 某国有一条大河(一条大河~~~~,波浪宽~~~~),河有笔直的南北两岸,岸上各有位置不相同的n个城市
* 北岸的每个城市有且只有一个友好城市在南区
* 不同城市的友好城市不同(南北对应呗)
* 每对友好城市向政府申请开辟航道,但是为了交通安全,两条航道不能交叉
* 求政府最多可以建多少满足条件的航道
* 输入:
* 第一行为城市数:N
* 接下来一直到N+1行,分别表示南岸与北岸的坐标
* 输出:
* 批准数字以及路径(就是第几个城市)
*
*/
//话说小白看见这个题第一反应肯定是:不会啊...(菜习惯了),但是研究一下就会发现:
/*
* 要满足不交叉.. 其实也好办:只要把一边从大到小排序,另一边只要是升序就不会相交
* 1 3
* 2 4
* 3 1
* 4 5
* 5 2
*
* 但是如果是找最长的呢?
* 那就是右边的最长不下降序列啊!
*
* 所以:
* 排序加最长不下降.现在应该就会了吧!
*
*
*
*/
//存数我想用结构体,首先用sort进行排序,再进行最长不下降
#include <bits/stdc++.h>
using namespace std;
int N;
struct Friend{
int x;
int y;
}friends[];
struct Rule{//sort自定义比较规则
bool operator()(const Friend &f1,const Friend &f2)
{
return f1.x < f2.x;
}
};
int f[];
int c[]={};
int main(){
cin>>N;
for (int i = ; i <= N; ++i) {//注意下标从1开始,是1到N
cin>>friends[i].x>>friends[i].y;
} sort(friends+,friends++N,Rule());//sort排序 for (int i = ; i <= N; ++i) {
cout<<friends[i].x<<" "<<friends[i].y<<endl;
} f[N]=;//注意,一般是有对最后一个值赋值的语句
int k;
for (int j = N-; j >= ; j--) {
int l=;//记录每一次固定点的最大值
k=;
for (int i = j+; i <= N ; ++i) {
if(f[i]>l && (friends[j].y < friends[i].y )){//两个条件:大于,且是后面的数的最大值
l=f[i];
k=i;
} }
f[j]=l+;
c[j]=k;//记录位置 }
int p=;
for (int m = ; m <= N ; ++m) {//寻找最大不下降
if(f[p]<f[m])
p=m;
}
cout<<f[p]<<endl;
//以下的几行几乎就是输出路径的套路,非常建议背过
cout<<p;
p=c[p];
while(p!=){
cout<<"-";
cout<<p;
p=c[p];
} }
做个小笔记:
一开始给数组命名成了friend直接报错,为啥呢?后来忽然想起friend是c++的一个关键字(友元),所以我很淡定地改成了friends.其实命名的时候,加个复数可能会回避一些自己不知道的关键字.
再就是注意对最后一个f[n]的赋值吧!
最后几行是输出路径的套路了....嗯嗯.
友好城市dp的更多相关文章
- 洛谷P2782 友好城市 DP
やはり まだあしたということは嘘でしょう.ぜんぶ忘れた( ´・ヮ・`) 所以今天就贴一道水题吧 原题>>https://www.luogu.org/problem/show?pid=278 ...
- 【经典DP】洛谷 P2782 友好城市
嘤嘤嘤,昨天两个文化课老师在上奥赛时招呼我(亲切交流),今天又要写工作报告,没时间写题解,希望今天能补上 友好城市 题目://洛谷那粘来的题面竟然能把格式粘过来 题目描述 有一条横贯东西的大河,河有笔 ...
- 【dp】友好城市
题目一: [题目描述] Palmia国有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市.北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同. 每对友好城市都 ...
- P2782 友好城市
P2782 友好城市一道伪装得很好的dp,一开始没想出来,不相交就是所有的都在右边,也就是对于当前的城市i和它的友好城市的坐标都在城市j和它的友好城市的右边,这样就转化成了求最长上升子序列,f[i]表 ...
- AC日记——友好城市 洛谷 P2782
题目背景 无 题目描述 有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市.北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同.没对友好城市都向政府申请在河上 ...
- 洛谷 P2782 友好城市
P2782 友好城市 题目描述 有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市.北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同.每对友好城市都向政府申 ...
- (Java实现) 友好城市
1263:[例9.7]友好城市 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 1867 通过数: 1032 [题目描述] Palmia国有一条横贯东西的大河,河有笔直的南北两岸, ...
- P2782 友好城市(最长不下降子序列)
题目描述 有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的$N$个城市.北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同.每对友好城市都向政府申请在河上开辟一条直 ...
- 【Noip模拟 20161005】友好城市
问题描述 小ww生活在美丽的ZZ国.ZZ国是一个有nn个城市的大国,城市之间有mm条单向公路(连 接城市ii.jj的公路只能从ii连到jj).城市ii.jj是友好城市当且仅当从城市ii能到达城市jj并 ...
随机推荐
- Nginx使用upstream实现负载均衡
如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...
- [源码解析]Oozie来龙去脉之提交任务
[源码解析]Oozie来龙去脉之提交任务 0x00 摘要 Oozie是由Cloudera公司贡献给Apache的基于工作流引擎的开源框架,是Hadoop平台的开源的工作流调度引擎,用来管理Hadoop ...
- selenium(12)-web UI自动化项目实战(PO模式,代码封装)
web UI自动化项目实战-项目 项目使用禅道,所以你需要搭建1个禅道,搭建禅道的方法和步骤见 https://www.cnblogs.com/xinhua19/p/13151296.html 搭建U ...
- 线程的创建方式以及synchronize的使用
线程的两种创建方式 继承 Thread class Thr extends Thread { @Override public void run() { Thread.cur ...
- rhel7 编写CMakeList.txt编译运行MySQL官方例子代码
注:若需要参考rhel7上安装MySQL 请 点击此处 1.下面MySQL链接库版本用到了boost(若需要请到官网下载最新链接库和文档和C++连接数据库操作示例) Red Hat Enterpris ...
- Android详细介绍MPAndroidChart-LineChart
在开发当中曲线图用的时候太多了,之前都是自己手写,之后发现太累还丑不符合需求 MPAndroidChart 先介绍LineChart 0.效果图 首先依赖 1. implementation 'co ...
- 《Head First 设计模式》:观察者模式
正文 一.定义 观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新. 要点: 观察者模式定义了对象之间一对多的关系. 观察者模式让主题(可观察者 ...
- 一、web自动化快速使用
1.什么是Selenium? selenium是一款基于web网页的UI自动化测试的框架,用来做web自动化测试 支持多浏览器操作,ie.firefox.chrome.edge.safaria ...
- Java并发编程——为什么要用volatile关键字
首发地址 https://blog.leapmie.com/archives/66ba646f/ 日常编程中出现 volatile 关键字的频率并不高,大家可能对 volatile 关键字比较陌生,再 ...
- 【题解】p2388阶乘之乘
原题传送门 题解一堆\(O(n)\)算法真给我看傻了. 考虑\(10=2*5\),因子2肯定更多,所以计算因子5的个数即可. 从5到n这\(n-5+1\)个数的阶乘里面,都各自含有一个因子\(5=1* ...