题目

【内存限制:$512 MiB$】  【时间限制:$2000 ms$】
【标准输入输出】  【题目类型:传统】  【评测方式:文本比较】

【题目描述】

小$A$决定开始一场奇妙的徒步旅行,旅行地图可以看成是一个平面直角坐标系,小$A$从家$O(0,0)$出发,每一步移动只能由他此时所在的位置$(x,y)$走到以下四个坐标之一:$(x-1,y),(x,y-1),(x+1,y),(x,y+1)$。现在有$N$个旅游景点,第$i$个旅游景点位置为$(x_i,y_i)$。 由于世界如此之大,整个旅行地图被分成了多个不同的气候区,某个景点$(x_i,y_i)$的气候区$C_i=max(x_i,y_i)$。小$A$想要更好的了解这个世界使得他这次徒步旅行更有意义,所以他想要去气候区$i+1$旅行当且仅当访问完气候区$i$的所有旅游景点。当他访问完所有的景点时,他会回到家里。 小$A$想让你帮他设计出一条旅游路线使得他移动的步数最少,因为徒步旅行还是比较累的……

【输入格式】

第一行输入一个整数$N$,表示旅游景点数量。

接下来$N$行,每行一个整数对$(x_i,y_i)$代表第$i$个景区的位置。

【输出格式】

仅一行,表示小$A$完成旅行所需移动的最少步数。

【数据范围】

对于所有测试数据:

$1≤n≤3 * 10^5$

$0≤h≤10^9$

$0≤x,y≤10^9$

题解

【做题经历】

这道题看到有四个方向,又是在一个网格中走路,首先我想到的就是搜索......

看了看数据范围,然后居然又想到剪枝或者是一个记忆化......

然后,$dp$思路就出来了

刚开始的$dp$思路:

定义状态$dp_{ij}$:已经访问了第$i$个气候区的其中$j$个

这个状态转移似乎很好想,但是感觉有些别扭

比如说你的上一层状态是从哪一个点转移过来的,这还是要枚举

然后就是你已经访问当前气候区的哪些点了,这个也是不知道的

所以说,这个状态定义得是有问题的

【正解】

想了一会儿,发现了一个关键的点:

每一个气候区在网格中都是一个拐角的形状,就像这样

当然这不是我说的关键的点

而每次访问完一个气候区,总是在这个拐角的最左边或者是最下边

那么我们就可以再新定义一个状态$dp[i][0|1]$:在访问完第i个气候区之后,是在最左边$(j==0)$还是最下边$(j==1)$

将输入的数据按照气候区从小到大排序(当然还有很多细节,这个交给你自己想或者是$py$一下代码

然后处理出一个$l$数组与一个$r$数组,其中

$l[i]$:第i个气候区最左边的点的下标

$r[i]$:第i个气候区最右边的点的下标

那么状转为$$dp[i][0]=Min(dp[i-1][0]+dis(l[i-1],r[i]),dp[i-1][1]+dis(r[i-1],r[i]))+dis(r[i],l[i])$$

$$dp[i][1]=Min(dp[i-1][0]+dis(l[i-1],l[i]),dp[i-1][1]+dis(r[i-1],l[i]))+dis(l[i],r[i])$$

状转都出来了,为什么不上代码?

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define cg (c=getchar())
inline int qread(){int x,f=1;char c;while(cg<'0'||'9'<c)if(c=='-')f=-1;for(x=(c^48);'0'<=cg&&c<='9';x=(x<<1)+(x<<3)+(c^48));return x*f;
}
#undef cg
template<class T>inline T Max(const T x,const T y){return x>y?x:y;}
template<class T>inline T Min(const T x,const T y){return x<y?x:y;}
template<class T>inline T fab(const T x){return x>0?x:-x;}
const int MAXN=3e5;
struct node{int x,y,c;node(){x=y=c=0;}node(const int X,const int Y):x(X),y(Y),c(Max(X,Y)){}node(const int X,const int Y,const int C):x(X),y(Y),c(C){}bool operator<(const node& a){if(c!=a.c)return c<a.c;if(x!=a.x)return x<a.x;return y<a.y;}
}dat[MAXN+5];
inline int dis(const int i,const int j){return fab(dat[i].x-dat[j].x)+fab(dat[i].y-dat[j].y);}
int hasind;
int dp[MAXN+5][2];
int l[MAXN+5],r[MAXN+5];
signed main(){int N=qread();for(int i=1,a,b;i<=N;++i){a=qread(),b=qread();dat[i]=node(a,b);}sort(dat+1,dat+N+1);l[hasind]=0;for(int i=1,pre=0;i<=N;++i){if(dat[i].c^pre){r[hasind]=i-1;pre=dat[i].c;l[++hasind]=i;}dat[i].c=hasind;}r[hasind]=N;for(int i=1;i<=hasind;++i){dp[i][0]=Min(dp[i-1][0]+dis(l[i-1],r[i]),dp[i-1][1]+dis(r[i-1],r[i]))+dis(r[i],l[i]);dp[i][1]=Min(dp[i-1][0]+dis(l[i-1],l[i]),dp[i-1][1]+dis(r[i-1],l[i]))+dis(l[i],r[i]);}printf("%lld\n",Min(dp[hasind][0]+dis(l[hasind],0),dp[hasind][1]+dis(r[hasind],0)));return 0;
}

[多校联考-初级]徒步旅行相关推荐

  1. 湖南长郡2021高考成绩查询时间,2021年湖南新高考六校、长郡十五校联考时间公布...

    2021年湖南新高考六校.长郡十五校联考时间公布 导读:距离2021年高考时间仅剩不到一百天,各个省份都的高三学子都进入紧张阶段.开始了各种模拟考试.2021届湖南省炎德英才大联考的考试时间也已经公布 ...

  2. 4246. 【五校联考6day2】san (Standard IO)

    4246. [五校联考6day2]san (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed Limits D ...

  3. 「多校联考」第三周二场

    「多校联考」第三周二场 T1 分数转换 题目 考场思考(正解) T2 Slow Path Finding Algorithm (SPFA) 考场思路 正解 T3 切面包 考场思路 正解 这套题是真的很 ...

  4. 计算机网络八校联考,八校联考排名出炉!前十名华师一独占八席,在武汉上华师一有多难?...

    原标题:八校联考排名出炉!前十名华师一独占八席,在武汉上华师一有多难? 近日,湖北省内高中有名的阶段性考试"八校联考"成绩出炉,这也是湖北省高三复课后的第一次线下全省统一考试. 小 ...

  5. 计算机组成原理湖北联考,计算机组成原理湖北七校联考-2014(a卷)v2教学教材(9页)-原创力文档...

    计算机组成原理湖北七校联考2013-2014(A卷)V2 精品文档 精品文档 收集于网络,如有侵权请联系管理员删除 收集于网络,如有侵权请联系管理员删除 精品文档 收集于网络,如有侵权请联系管理员删除 ...

  6. NOIP模拟赛 四校联考 递推 + 分类讨论 + 树上期望

    NOIP 模拟题 题目名称兔子被子蚊子 源程序文件名rabbit.cpp quilt.cpp mosquito.cpp 输入文件名rabbit.in quilt.in mosquito.in 输出文件 ...

  7. jzoj4230. 【五校联考4day1】淬炼神体(B组——Day3)

    jzoj4230. [五校联考4day1]淬炼神体 题目 Description 王仙女将你提供的答案填在<葵花宝典>上,突然,宝典发出耀眼的白光,一股强大的吸力瞬间将仙女吸入宝典中. 一 ...

  8. 多校联考 CSP-J 2019 第三次模拟赛 题解

    Notice :1.T4算法7的f(t)f(t)f(t)函数写错了-已更正. 2. 之后(可能)会发git链接. 3. 欢迎评论. 4. T4是有O(n2log⁡n)O(n^2 \log n)O(n2 ...

  9. 抛物线交点式公式_2020“九校联考”中点公式解决平四存在性问题

    原题呈现 24. 如图,抛物线y=ax2+bx+c的图象经过A(1,0),B(3,0),C(0,6)三点. (1)求抛物线的解析式. (2)抛物线的顶点M与对称轴l上的点N关于x轴对称,直线AN交抛物 ...

最新文章

  1. Item 29. Virtual Constructors and PrototypeItem 30. Factory Method
  2. Android性能调优利器StrictMode
  3. [机器学习]AutoML --- TOPT
  4. Windows Phone 用WebBrowser加载HTML页面
  5. (0)PCIE接口目录(学无止境)
  6. java并发编程:线程安全管理类--原子操作类--AtomicLongFieldUpdaterT
  7. scala文件通过本地命令运行
  8. java如何制作简单的数组_【数据结构与算法】Java制作一个简单数组类
  9. mysql有mdf文件和ldf文件吗_mdf与ldf文件格式
  10. apache 支持apk下载安装
  11. AutoCAD坐标与图像坐标
  12. GoLang之Go 语言与鸭子类型的关系(1)
  13. Tbase 源码 (二)
  14. Android——excise(用线性布局、表格布局、相对布局做发送邮件界面)
  15. Tampermonkey油猴脚本搭配工具安装【网盘直链下载助手】
  16. 径向基函数神经网络(RBFNN)
  17. 第8天:鼠标控制与32位模式切换
  18. stm32 cubemx 新建项目一直报错的问题终于解决了
  19. 什么是过拟合?过拟合的10个解决办法都有哪些?
  20. 只需几步,用Python3实现属于自己的搜索引擎

热门文章

  1. 【Windows网络重置】
  2. 用小白鼠试验毒水问题
  3. 2020京东校园招聘笔试编码题小分享--大小写切换
  4. 和计算机网络相关的段子,微信幽默段子 没有谁和谁一开始就很配
  5. 【新技研】高通全新骁龙Krait 300/400处理器架构浅析
  6. 【JZOJ4883】【NOIP2016提高A组集训第12场11.10】灵知的太阳信仰
  7. 地球引擎中级教程——基本监督分类(含练习)
  8. 关于迅盘Turbo Memory的ReadyDrive功能被禁用的思考
  9. cogs 1487. 麻球繁衍(概率dp)
  10. 2017河南工业大学校赛 C 魔法宝石