题目链接

luogu [TJOI2007]线段

题解

dp[i][0/1]第i行在左/右端点的最短路

瞎转移

代码

#include<bits/stdc++.h>
using namespace std;
inline int read() {
int x= 0 ,f = 1;
char c = getchar();
while(c < '0' || c > '9')c = getchar();
while(c <= '9' &&c >= '0')x = x * 10 + c - '0',c = getchar();
return x * f;
}
const int maxn = 500007;
int n;
int l[maxn],r[maxn],dp[maxn][2];
int main() {
n = read();
for(int i = 1;i <= n;++ i) l[i] = read(),r[i] = read();
dp[1][0] = r[1] + r[1] - l[1] - 1;
dp[1][1] = r[1] - 1;
for(int i = 2;i <= n;++ i) {
int x = dp[i - 1][0],y = dp[i - 1][1];
dp[i][0] = min(x + abs(l[i-1] - r[i]) + r[i] - l[i] + 1, y + abs(r[i-1] - r[i]) + r[i] - l[i] + 1);
dp[i][1] = min(x + abs(l[i-1] - l[i]) + r[i] - l[i] + 1, y + abs(r[i-1] - l[i]) + r[i] - l[i] + 1);
}
printf("%d\n",min(dp[n][0] + n - l[n], dp[n][1] + n - r[n]));
return 0;
}

luogu [TJOI2007]线段的更多相关文章

  1. 【luogu P3372 线段树1】 模板

    线段树的模板题 题目链接:https://www.luogu.org/problemnew/show/P3372 update区间修改,query区间求和 #include <iostream& ...

  2. luogu 3582 线段树

    线段树内存下mx[k]的值是动态的1-i这个区间的贡献答案 实际上点存的就是区间答案,但用max是为了求最大区间答案(有可能虽然贡献被消除但后来有更大的贡献填补答案空缺) #include<bi ...

  3. [TJOI2007] 线段

    因为每行必须走完才能到下一行,所以我们有两种决策: 1.最后留在线段左端点 2.最后留在线段右端点 这种存在状态转移且多决策的问题用动态规划来进行递推是最好不过的了. 所以我们设\(dp[i][0/1 ...

  4. 【luogu P3373 线段树2】 模板

    题目链接:https://www.luogu.org/problemnew/show/P3373 lazy标记两个,先乘后加 #include <iostream> #include &l ...

  5. 【洛谷 P3842】[TJOI2007]线段(DP)

    裸DP.感觉楼下的好复杂,我来补充一个易懂的题解. f[i][0]表示走完第i行且停在第i行的左端点最少用的步数 f[i][1]同理,停在右端点的最少步数. 那么转移就很简单了,走完当前行且停到左端点 ...

  6. [洛谷Luogu]P1803 线段覆盖问题

    贪心想法题解的各位dalaodalaodalao都讲得很清楚了,在下就提供一种桶排的做法吧. 因为给出数据范围 0≤ai<bi≤10000000≤ai<bi≤10000000≤ai< ...

  7. P3842 [TJOI2007]线段

    最近多刷些dp,觉得这个算不上蓝题   在一个\(n\times n\)的平面上,在每一行中有一条线段,第\(i\)行的线段的左端点是\((i, L_i)\),右端点是\((i, R_i)\),其中\ ...

  8. [TJOI2007] 线段 (动态规划)

    题目链接 Solution 传统的线性 \(dp\) . \(f[i][0]\),\(f[i][1]\) 分别表示最后一次在 \(i\) ,然后在 左边或者右边的最小步数. 然后就每次根据上一次左边和 ...

  9. [线段树]Luogu P3372 线段树 1【模板】

    #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #d ...

随机推荐

  1. RabbitMQ入门介绍

    1.关于AMQP协议 AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设 ...

  2. 启动MyEclipse8.5时未响应

    错误原因: MyEclipse在进行编译时被强行关闭,就会编译内容出错. 解决方法: 1. 换个工作空间. 2.    寻找到工作空间那,访问到H:\javaWork5\.metadata\.plug ...

  3. Linux下/etc/passwd、/etc/shadow、/etc/group文件

    1./etc/passwd [root@prac ~]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbi ...

  4. 第7月第26天 iOS httpserver

    1. cocoahttpserver 1)httpserver [httpServer start:&error] 2)HTTPConnection [newConnection start] ...

  5. 使用Cobbler批量部署Linux和Windows:Cobbler服务端部署(一)

    本文记录了我使用Cobbler批量安装部署Linux和Windows系统的过程,文章主要分为三部分:Cobbler服务端的安装配置.Linux发行版CentOS和Ubuntu的自动安装部署.Windo ...

  6. Java初转型-SSM配置文件

    文章来源:http://www.cnblogs.com/wxisme/p/4924561.html web.xml的配置                                        ...

  7. 直接读取修改exe文件

    1. 前言 配置器的编写有很多的方式,主要是直接修改原始的受控端的程序,有的方式是把受控端和配置信息都放到控制端程序的内部,在需要配置受控端的时候直接输入配置信息,生成受控端:也有的方式是在外部直接修 ...

  8. Linux如何解决动态库的版本控制

    引用自:http://www.linuxidc.com/Linux/2012-04/59071.htm (换句话说,soname不是真实存在的文件,只是在此库中和将来调用此库的文件中保存的一个名字,在 ...

  9. 基于 Apache 在本地配置多个虚拟主机

    如何使用 Apache 在本地配置出多个虚拟主机呢?而且使用不同的“域名”来访问本地不同的站点呢? 一般情况下,咱们都使用 localhost 来访问本机上的服务器,在我们的 C:/WINDOWS/s ...

  10. linux如何查看端口被哪个进程占用?

    参考:https://jingyan.baidu.com/article/546ae1853947b71149f28cb7.html 1.lsof -i:端口号 2.netstat -tunlp|gr ...