首页 > 其他分享 >动态规划-----线性

动态规划-----线性

时间:2024-04-02 23:11:07浏览次数:14  
标签:24 le 路程 int 线段 样例 ----- 线性 动态

[TJOI2007] 线段(洛谷P3842)

题目描述

在一个 \(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\)。








解答

#include <iostream>
using namespace std;
const int N = 2e4 + 10;
typedef pair<int, int> PII;
#define L first
#define R second

PII a[N];
int n;
int f[N][2];

int main()
{
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) 
		scanf("%d%d", &a[i].L, &a[i].R);
	
	
	f[1][0] = abs(a[1].R - 1) + abs(a[1].L - a[1].R);
	f[1][1] = abs(a[1].R - 1);

	for (int i = 2; i <= n; i++)//状态转移
	{
		int x1 = f[i - 1][0] + abs(a[i - 1].L - a[i].R) + abs(a[i].R- a[i].L);
		int y1 = f[i - 1][1] + abs(a[i - 1].R - a[i].R) + abs(a[i].R - a[i].L);
		f[i][0] = min(x1, y1) + 1;
		
		int x2 = f[i - 1][0] + abs(a[i - 1].L - a[i].L) + abs(a[i].L -  a[i].R);
		int y2 = f[i - 1][1] + abs(a[i - 1].R- a[i].L) + abs(a[i].L - a[i].R);
		f[i][1] = min(x2, y2) + 1;
	}

	printf("%d", min(f[n][0] + abs(a[n].L - n), f[n][1] + abs(a[n].R - n)));//最后的答案还要加上到(n,n)的距离
	return 0;
}

标签:24,le,路程,int,线段,样例,-----,线性,动态
From: https://www.cnblogs.com/xingzhuz/p/18111711

相关文章

  • javaweb学习(day11-监听器Listener&&过滤器Filter)
    一、监听器Listener1 Listener介绍Listener监听器它是JavaWeb的三大组件之一。JavaWeb的三大组件分别是:Servlet程序、Listener监听器、Filter过滤器Listener是JavaEE的规范,就是接口监听器的作用是,监听某种变化(一般就是对象创建/销毁,属性变化),触发对应方......
  • 软考 - 系统架构设计师 - 数据流图案例题
    阅读以下关于系统数据分析与建模的叙述,在答题纸上回答问题1至问题3。【说明】        某公司正在研发一套新的库存管理系统。系统中一个关键事件是接收供应商供货。项目组系统分析员小王花了大量时间在仓库观察了整个事件的处理过程,并开发出该过程所执行活动的列表:......
  • Kubernetes(k8s):部署、使用 metrics-server
    Kubernetes(k8s):部署、使用metrics-server一、metrics-server简介二、部署metrics-server2.1、下载MetricsServer部署文件2.2、修改metrics-server.yaml文件2.3、部署MetricsServer2.4、检查MetricsServer三、使用MetricsServer3.1、查看节点使用情况3.2、......
  • Eval-Expression.NET: 在运行时计算、编译和执行C代码和表达式。
    https://www.5axxw.com/wiki/content/8ahrg3 在运行时评估、编译和执行动态C代码和表达式从简单的C数学表达式。。。intresult=Eval.Execute<int>("X+Y",new{X=1,Y=2});要解析的复杂代码。intresult=Eval.Execute<int>(@"varlist=newList<int>(){1......
  • 【CHI协议-1】CacheLine状态
    从这一章开始就和大家一起分享一下CHI协议中具体的一些事务以及场景。今天主要梳理一下Read事务,但是要讲清楚这些乱七八糟的事务,还需要了解其他很多知识点,不然就是云里雾里的,比如cacheline的状态啊,什么是snoop啊,以及一致性节点啊等等。但是这些太多了,如果先要把这些都讲清楚......
  • BF548/BF547/BF549系列DSP的开发教程二十一:NorFLASH编程-可烧写文件的生成
    作者的话BF54X系列DSP,是ADIBlackfin系列的4系列,在产品线做这个系列DSP的产品定义时,充分吸取了客户在BF53X上的痛点,把BF54X做成了外设最丰富的一类DSP,这个DSP曾经在车载视频,工控领域有不少的成功案例,OP作为2000年入坑的老鸟,自然也是用它做过很多项目。系列教程,说一说这个4......
  • tryhackme-Boiler CTF
    信息收集使用nmap对靶机进行信息收集根据扫描开放的端口,先访问21端口进行初步探测并没有得到有用的提示,继续访问80端口进行探测根据页面回显,靶机应该是一个ubuntu的操作系统,可能有隐藏目录,使用gobuster进行目录扫描gobusterdir-uhttp://10.10.229.228/-w/usr/share/......
  • gdscript学习笔记3-标识符
    任何仅限于字母字符(a到z和A到Z),数字(0到9)和_的字符串都可以作为标识符.此外,标识符不能以数字开头.标识符区分大小写(foo和FOO是不同的).extendsNode2Dvarabc="aaaa"varAbc="bbb"var_abc="ccc"varabc222="ddd"#var222abc="eee"......
  • Excel 公式积累-不常用又酷炫的小点
    1、动态渐变进度条=IFS(C2=0%,"未开始",C2=-1%,"有阻塞",C2<100%,"进行中",C2=100%,"已完成") 2、自动计算空单元格个数统计B4到B64中间有空单元格的个数=COUNTBLANK(B4:B63)3、勾选☑️行自动整行文本加删除线4、多条件统计个数=(SUMIFS(E4:E63,A4:A63,0)-SUMIFS(E4:E......
  • 动态规划详解
    动态规划详解动态规划(DynamicProgramming,简称DP)是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式来求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。在计算机科学中,动态规划是解决优化问题的一个强大工具。......