洛谷P3842 线段——题解

news/2024/11/19 14:28:40/文章来源:https://www.cnblogs.com/qc0817/p/18347678

洛谷P3842题解


传送锚点


摸鱼环节

[TJOI2007] 线段

题目描述

在一个 \(n \times n\) 的平面上,在每一行中有一条线段,第 \(i\) 行的线段的左端点是\((i, L_{i})\),右端点是\((i, R_{i})\)

你从 \((1,1)\) 点出发,要求沿途走过所有的线段,最终到达 \((n,n)\) 点,且所走的路程长度要尽量短。

更具体一些说,你在任何时候只能选择向下走一步(行数增加 \(1\))、向左走一步(列数减少 \(1\))或是向右走一步(列数增加 \(1\))。当然,由于你不能向上行走,因此在从任何一行向下走到另一行的时候,你必须保证已经走完本行的那条线段。

输入格式

第一行有一个整数 \(n\)

以下 \(n\) 行,在第 \(i\) 行(总第 \((i+1)\) 行)的两个整数表示 \(L_i\)\(R_i\)

输出格式

仅包含一个整数,你选择的最短路程的长度。

样例 #1

样例输入 #1

6
2 6
3 4
1 3
1 2
3 6
4 5

样例输出 #1

24

提示

我们选择的路线是

 (1, 1) (1, 6)(2, 6) (2, 3)(3, 3) (3, 1)(4, 1) (4, 2)(5, 2) (5, 6)(6, 6) (6, 4) (6, 6)

不难计算得到,路程的总长度是 \(24\)

对于 \(100\%\) 的数据中,\(n \le 2 \times 10^4\)\(1 \le L_i \le R_i \le n\)


又是日常水题解的一天
又是努力学oi的一天。咱们今天来切一道黄题(窝太菜了)。这道黄题也是很不人性化,从体面来看,感觉好像跟动态规划没啥毛关系,但是既然标签打了动态规划我们在训练动态规划,那就肯定先考虑动态规划。



正片开始

1.设计状态

考虑设计这道题的状态,很显然对于每一行都需要有个状态进行统计,而一条线段有左右两个端点,于是我们很容易的可以设出:

\(f[i][0/1]\)表示到达第i行的左端点0或右端点一的最小步数。

2.状态转移

设计完状态,接下来自然需要对状态进行转移,考虑当前状态的上一个状态不难得到:

\(f_{i,0}=min(f_{i-1,0}+abs(l_{i-1}-r_{i})+r_{i}-l_{i}+1 , f_{i-1,1}+abs(r_{i-1}-r_{i})+r_{i}-l_{i}+1)\)

同理易得

\(f_{i,1}=min(f_{i-1,0}+abs(l_{i-1}-l_{i})+r_{i}-l_{i}+1 , f_{i-1,1}+abs(r_{i-1}-l_{i})+r_{i}-l_{i}+1)\)

这样,状态转移就完成了。

code:

f[i][0]=min(f[i-1][0]+abs(l[i-1]-r[i])+r[i]-l[i]+1,f[i-1][1]+abs(r[i-1]-r[i])+r[i]-l[i]+1);
f[i][1]=min(f[i-1][0]+abs(l[i-1]-l[i])+r[i]-l[i]+1,f[i-1][1]+abs(r[i-1]-l[i])+r[i]-l[i]+1);

最后处理下结尾就ok了。


完整代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+5;
int l[N],r[N],f[N][3],n;
int main()
{cin>>n;for(int i=1;i<=n;i++) cin>>l[i]>>r[i];f[1][0]=r[1]+r[1]-l[1]+1;//需要经过这条线段f[1][1]=r[1]-1;for(int i=2;i<=n;i++){f[i][0]=min(f[i-1][0]+abs(l[i-1]-r[i])+r[i]-l[i]+1,f[i-1][1]+abs(r[i-1]-r[i])+r[i]-l[i]+1);f[i][1]=min(f[i-1][0]+abs(l[i-1]-l[i])+r[i]-l[i]+1,f[i-1][1]+abs(r[i-1]-l[i])+r[i]-l[i]+1);}cout<<min(f[n][0]+abs(l[n]-n),f[n][1]+abs(r[n]-n));return 0;
}

完结。

个人主页

看完点赞,养成习惯

\(\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/779389.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA中开启注解处理器时的问题

项目构建脚本:gradle 项目中使用mapstruct(要求开启注解处理器) 使用IDEA构建和运行:在上面的条件下,运行时会报错。解决办法参考: https://blog.csdn.net/kq1983/article/details/130740712 https://blog.csdn.net/qq_33240556/article/details/137046631

[GYCTF2020]Node Game及知识点

🚩crlf简介:CRLF 指的是回车符(CR,ASCII 13,\r,%0d) 和换行符(LF,ASCII 10,\n,%0a),CRLF即回车换行,利用回车换行。因为HTTP协议中是用回车换行来界定头部和实体的,所以如果我们可以用回车换行来恶意拆分请求或者响应 检测:CRLF注入漏洞的本质和XSS有点相似,攻击…

收银台大讲究

支付不就是个收银台嘛?你一个页面怎么要干这么久?这可能是每个做支付的人遇到过得尴尬问题。其实这是微信、支付宝的收银台支付体验做的太好了,给普通人产生的错觉,以为收银台就是几张页面。当你被“野生收银台”制的服服帖帖的时候,你才会发现收银台有大讲究。这次不废话…

js语法

1.作用域 1.1 定于 作用域( scope)规定了变量能够被访问的“范围”,离开了这个“范围″变量使不能被访问 1.2 分类 1.2.1局部作用域 1.2.1.1 函数作用域 在函数内部声明的变量只能在函数内部被访问,外部无法直接访问。1.2.1.2 块作用域 在 Javascript中使用仆}包裏的代码称为代…

JavaSE基础知识分享(三)相关练习题

关于面向对象中的封装部分不知道大家掌握怎么样,快来看看这些题目你能很快写出来吗?写在前面 大家前面的面向对象部分学的怎么样了,快来看看这些题你能不能快速地写出答案,面向对象在Java中是非常重要的,快来检测你的薄弱点在哪,及时查漏补缺! 使用面向对象思想编写下列…

kali常用配置

用户须知 ❝ 1.免责声明:本教程作者及相关参与人员对于任何直接或间接使用本教程内容而导致的任何形式用户须知1.免责声明:本教程作者及相关参与人员对于任何直接或间接使用本教程内容而导致的任何形式的损失或损害,包括但不限于数据丢失、系统损坏、个人隐私泄露或经济损失…

SqlServer 主从复制错误分析--20598

十年河东,十年河西,莫欺少年穷 学无止境,精益求精 1、在分发服务器执行如下脚本select * from MSsubscriber_infoselect * from MSpublications 2、选择分发数据库-distribution,执行如下脚本 sp_helpsubscriptionerrors IZQY9C2TQSKGS9ZTEST ,DBTEST , DbPiblish ,iZzvz…

容器引擎-Docker

Docker是一个开源的应用容器引擎,可以轻松的为任何应用创建一个轻量级、可移植的、自给自足的容器。Docker类似于集装箱,各式各样的货物,经过集装箱的标准化进行托管,而集装箱和集装箱之间没有影响。也就是说,Docker平台就是一个软件集装箱化平台,这就意味着我们自己可以…

穿墙神器frp

背景 内网渗透需要 官网 https://github.com/fatedier/frp 当前最新版https://github.com/fatedier/frp/releases/tag/v0.59.0 部署 写两个简单的加入systemctl的脚本create_frps_service.sh #!/bin/bash install_path=$(cd $(dirname $0); pwd) frps_exec=$install_path/frps …

wpf 中的三个 UnhandledException

结构化异常处理 在异常点生成异常的结构体,异常分发 WPF中的三个Excption处理函数AppDomain::UnhandledException 事件属性 UI线程和Thread 实例的异常会触发该事件。Application::DispatcherUnhandledExcetion 事件属性 UI线程异常会触发该事件。如果事件的IsHandle=false,异…

19.python之自定义函数

python之自定义函数 一、函数的介绍 1、函数定义:函数是一个组织好,可重复使用,实现单一或联合的代码段。 2、函数作用:a、降低代码的冗余、b、增加代码的复用性 c、提高程序的拓展性 d、封装 二、python的结构三、函数的使用 1、格式: def 函数名 (变量): 执行语句 函…