当前位置: 首页 > news >正文

P3842 [TJOI2007] 线段(动态规划)

题目描述

在一个 n×n 的平面上,在每一行中有一条线段,第 i 行的线段的左端点是 (i,Li​),右端点是 (i,Ri​)。

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

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

输入格式

第一行有一个整数 n。

以下 n 行,在第 i 行(总第 (i+1) 行)的两个整数表示 Li​ 和 Ri​。

输出格式

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

输入输出样例

输入 #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% 的数据,1≤n≤2×104,1≤Li​≤Ri​≤n。

思考:

我们首先对于第一行来说,如果走完当前线段,那么要么停留在左端点,要么停留在右端点。对于下一行,我们任然要走完线段,此时若停留在右端点,则会产生两种情况:从上一行的左端点下来,走完当前线段,停留在右端点;从上一行的右端点下来,走完当前线段,停留在左端点。若停留在左端点,则也具有上述相似的两种情况。由于我们需要求最后到达(n,n)的最小距离,所以我们需要最小化每一行走完线段的最小距离。

我们定义dp[i][0]为在当前i行,走完线段后,停留在左端点的最小距离;dp[i][1]为在当前i行,走完线段后,停留在左=右端点的最小距离。

#include<bits/stdc++.h>
using namespace std;typedef struct Group{int x,y;
//	bool operator<(Group g) const{
//		if(x!=g.x) return x<g.x;
//		else return y<g.y;
//	}	
}G;
typedef long long ll;
const int mod = 1e6+7;
int n,m;
int r,c;
int dx[4] = {0,0,1,-1};
int dy[4] = {1,-1,0,0};int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n;vector<int> L(n+1);vector<int> R(n+1);for(int i=1; i<=n; i++){int l,r;cin>>l>>r;L[i] = l;R[i] = r;}vector<vector<int>> dp(n+1, vector<int>(2,0));dp[1][0] = abs(R[1]-1) + R[1]-L[1];dp[1][1] = abs(L[1]-1) + R[1]-L[1];for(int i=2; i<=n; i++){int L_r = 1 + abs(R[i]-L[i-1]) + dp[i-1][0];int L_l = 1 + abs(L[i]-L[i-1]) + dp[i-1][0];int R_r = 1 + abs(R[i]-R[i-1]) + dp[i-1][1];int R_l = 1 + abs(L[i]-R[i-1]) + dp[i-1][1];dp[i][0] = min(L_r,R_r)+R[i]-L[i];dp[i][1] = min(L_l,R_l)+R[i]-L[i];}cout<<min(dp[n][0]+abs(L[n]-n),dp[n][1]+abs(R[n]-n))<<endl;return 0;
}
http://www.dtcms.com/a/264759.html

相关文章:

  • RAC (ReactiveCocoa) 的实现机制与消息传递策略
  • XILINX Kintex 7系列FPGA的架构
  • ubentu服务器版本安装Dify
  • 【leetcode算法300】:哈希板块
  • 多项式带余除法——线性代数题目为例
  • 【.NET Framework 窗体应用程序项目结构介绍】
  • WHAT - React Native 中 Light and Dark mode 深色模式(黑暗模式)机制
  • 如何在Excel中每隔几行取一行
  • 【PMP】项目管理入门:从基础到环境的体系化拆解
  • 分布式定时任务:xxl-job
  • 苍穹外卖day12--Apache POI导出Excel报表
  • [MIA 2025]CLIP in medical imaging: A survey
  • 多云密钥统一管理实战:CKMS对接阿里云/华为云密钥服务
  • .npmrc和.yarnrc配置文件介绍:分别用于 Node.js 中的 npm(Node Package Manager)和 Yarn 包管理工具
  • oracle集合三嵌套表(Nested Table)学习
  • 【第三章:神经网络原理详解与Pytorch入门】01.神经网络算法理论详解与实践-(1)神经网络预备知识(线性代数、微积分、概率等)
  • 微控制器中的EXTI0(External Interrupt 0)中断是什么?
  • uniapp socket 封装 (可拿去直接用)
  • 可编辑33页PPT | 某材料制造企业工业互联网平台解决方案
  • 云原生环境下部署大语言模型服务:以 DeepSeek 为例的实战教程
  • 6种iOS开发中常用的设计模式
  • Qt designer坑-布局内子控件的顺序错乱
  • 量化交易学习之自动化交易策略 [freqtrade 框架学习] ,常见问题避坑指南!!!!
  • <u>#12288;#8203;</u> HTML5全角空格,自动换行,半角用#32;#8203;
  • Spring AI Advisor RAG使用指南
  • Android Auto即将带来变革
  • AI大模型:从编码助手到流程重构者——软件开发新范式解析
  • 【前端】1 小时实现 React 简历项目
  • 多种方法实现golang中实现对http的响应内容生成图片
  • MySQL间隙锁详解:解决幻读的「隐形守护者」