友好城市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并 ...
随机推荐
- 基于 fetch 的请求封装
原生 fetch 请求失败后(如无网络)状态会变成 reject 走 .catch .绝大多数情况下业务场景只需要给个 toast 等简单处理.每个请求都 .catch 会显得格外繁琐,并且如果不 . ...
- Docker(六)容器数据卷
容器数据卷 docker的理念回顾 将应用和环境打包成一个镜像 需求:数据可以持久化和同步 使用数据卷 指定路径挂载 docker run -it -v 主机目录:容器内目录 # 测试 [root@h ...
- PDF无法复制/打印/编辑怎么办?
PDF的内容不能复制/打印/编辑,主要有两种原因: 1.PDF文件设置了权限保护 2.PDF内容是图片 第一种,PDF被设置了权限保护 这种的特点是可以选中PDF里的文字,但无法复制 PDF格式标准内 ...
- Netty 源码解析(三): Netty 的 Future 和 Promise
今天是猿灯塔“365篇原创计划”第三篇. 接下来的时间灯塔君持续更新Netty系列一共九篇 Netty 源码解析(一): 开始 Netty 源码解析(二): Netty 的 Channel 当前:Ne ...
- CSS五种方式实现 Footer 置底
页脚置底(Sticky footer)就是让网页的footer部分始终在浏览器窗口的底部.当网页内容足够长以至超出浏览器可视高度时,页脚会随着内容被推到网页底部:但如果网页内容不够长,置底的页脚就会保 ...
- vx小程序(1)
一.程序配置 app.json 1. pages字段——用于描述当前小程序的页面路径. 2.window字段——定义小程序所有页面的顶部背景颜色,文字颜色等. 注意:可以在pages/logs目录下的 ...
- C#获取页面内容的几种方式
常见的Web页面获取页面内容用 WebRequest 或者 HttpWebRequest 来操作 Http 请求. 例如,获取百度网站的 html 页面 var request = WebReques ...
- 记录一次dns引发的线程池故障
# 问题描述 公司做的是一个支付系统,会对接很多第三方公司. 突然有一天,有一家第三方(简称金花平台)反应收不到我们的通知消息. # 排查过程 我们登陆自己的服务器,检查程序日志,是有给金花平台发送通 ...
- 正则表达式以及sed,awk用法 附带案例
则表达式 基本正则 ^ $ [ ] [^] . * \{n,m\} \{n,\} \(ro\)\{2\} \(\) 扩展正则 egrep grep - ...
- 介绍下 npm 模块安装机制,为什么输入 npm install 就可以自动安装对应的模块?
1. npm 模块安装机制: 发出npm install命令 查询node_modules目录之中是否已经存在指定模块 若存在,不再重新安装 若不存在 npm 向 registry 查询模块压缩包的网 ...