Description

给定平面上n个点,设计一条路线,从最左边的点出发,走到最右边的点在走回来,除了最左边的点,其他每个点恰好经过一次,且是的路径总长最短。两点之间的路径长度为欧几里得距离(就是直线距离)。

Input

第一行一个整数n表示点数,后面n行,每行两个小数表示点的坐标。

Output

一个小数表示最短的路径总长,答案保留4位小数。

Sample Input

5
10 10
2 8
1 2
10 6
2 5

Sample Output

29.5535

Data Constraint

对于40%数据n<=100
​对于100%数据n<=5000

Solution

  • 这道题的关键就是如何处理来回走、且走的点不重复的问题。

  • 于是可以巧妙的改成:两个人同时从最左点出发,沿着两条不同的路径走,最后都到达最右点

  • 且除了起点和终点外其余每个点恰好被一个人经过

  • 则设出DP状态: F[i][j]F[i][j] 表示从 11 到 Max(i,j)Max(i,j) 都已被走过、且不重复的最小距离。

  • 那么走出下一步(倒着做), F[i][j]F[i][j] 可以由 F[i+1][j]F[i+1][j] 和 F[i][j+1]F[i][j+1] 转移过来。

  • 由于两个人是完全相同的,所以强制 i>ji>j , 则有: F[i][j]=F[j][i]F[i][j]=F[j][i]

  • 于是 F[i][j]F[i][j] 就由 F[i+1][j]F[i+1][j] 和 F[i+1][i]F[i+1][i] 转移过来。

  • 且边界是: F[n−1][j]=dist[n−1][n]+dist[j][n]F[n-1][j]=dist[n-1][n]+dist[j][n] (直接 i,ji,j 各走一步到终点即可)

  • 那么答案就是: dist[1][2]+F[2][1]dist[1][2]+F[2][1] 。

  • (因为第一步是 ii 走到了第二个点,根据定义就是 F[2][1]F[2][1] )

  • 这样时间复杂度就是 O(N2)O(N^2),注意空间问题(开滚动数组解决)和精度问题(开 doubledouble 解决)。

Code

#include<cstdio>
#include<cmath>
using namespace std;
const int N=5001;
struct data
{double x,y;
}a[N];
int n,roll;
double f[2][N];
inline double get(int x,int y)
{return sqrt((a[x].x-a[y].x)*(a[x].x-a[y].x)+(a[x].y-a[y].y)*(a[x].y-a[y].y));
}
inline double min(double x,double y)
{return x<y?x:y;
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%lf%lf",&a[i].x,&a[i].y);for(int i=1;i<n-1;i++) f[0][i]=get(n-1,n)+get(i,n);for(int i=n-2;i>1;i--){roll^=1;for(int j=1;j<i;j++)f[roll][j]=min(f[roll^1][j]+get(i,i+1),f[roll^1][i]+get(j,i+1));}printf("%.4lf",f[roll][1]+get(1,2));return 0;
}

JZOJ 5268. 旅行相关推荐

  1. 旅行 jzoj 1281

    Description 今天又是个神圣的日子,因为LHX教主又要进行一段长途旅行.但是教主毕竟是教主,他喜欢走自己的路,让别人目瞪口呆.为什么呢,因为这条路线高低不平,而且是相当的严重. 但是教主有自 ...

  2. JZOJ 3053 【NOIP2012模拟10.25】旅行

    旅行 题目大意 给定一个 n n行mm列的字符矩阵, 告诉你哪些格子可以进入,哪些不可以.移动的规则为:每秒钟以上下左右四个方向之一移动一格,不能进入障碍. 计算:在空地中随机选择起点和终点(可以重合 ...

  3. JZOJ 5794. 2018.08.10【2018提高组】模拟A组省选 旅行

    Description 悠悠岁月,不知不觉,距那传说中的pppfish晋级泡泡帝已是过 去数十年.数十年 中,这颗泡泡树上,也是再度变得精彩,各种泡泡 天才辈出,惊艳世人,然而,似乎 不论后人如何的出 ...

  4. 2022-2028年中国在线旅行预订市场投资分析及前景预测报告

    [报告类型]产业研究 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了在线旅行行业相关概述.中国在线旅行行业运行环境.分析了中国在线旅行行 ...

  5. LeetCode简单题之旅行终点站

    题目 给你一份旅游线路图,该线路图中的旅行线路用数组 paths 表示,其中 paths[i] = [cityAi, cityBi] 表示该线路将会从 cityAi 直接前往 cityBi .请你找出 ...

  6. usaco Cow Tours 牛的旅行

    Cow Tours 牛的旅行 农民 John 的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场. 但是就目前而言,你能看到至少有两个牧区不连通.这样,农民 John 就有 ...

  7. JZOJ 5461 购物 —— 贪心

    题目:https://jzoj.net/senior/#main/show/5461 贪心,原来想了个思路,优先选优惠价最小的 K 个,然后其他按原价排序遍历: 如果当前物品没选过,原价选上,如果选过 ...

  8. gatsby_如何使用Gatsby和Leaflet创建夏季公路旅行地图绘制应用程序

    gatsby Get ready for the summer by building your own road trip mapping app with this step-by-step gu ...

  9. 汉印标签打印机app_旅行一族福音 汉印CP4000L便携照片打印机体验

    最近一段时间,有个问题经常在我脑海中出现:"我们为什么需要打印照片?" 不过没想到,让我瞬间解除这个疑惑的,却是近期刚刚上市的一款便携照片打印机-汉印CP4000L.自从知晓这款产 ...

最新文章

  1. 权威预测:2018年这十大数字化转型趋势要火!
  2. Windows 技巧篇-点开头的文件夹名创建方法。如何创建点开头的文件夹?
  3. Python Django 一对多正向查询示例
  4. java 动态拼接sql_动态SQL拼接工具类
  5. Linux 下禅道和 SVN、GIT 集成插件发布
  6. C#:向C++封送结构体数组
  7. Programming MS Office 2000 Web Components第二章第一节(第二部分)
  8. mysql基础之四:int(M)中M的含义
  9. 一个解除TCP连接的TIME_WAIT状态限制的简便方法
  10. pageable设置size_总结SpringBoot使用Pageable实现分页源码
  11. java aes 模式_Java实现多种加密模式的AES算法-总有一种你用的着!
  12. Spring Boot 解决方案 - 会话
  13. csdn 博客添加目录方法
  14. 深度学习神经网络中的梯度检查
  15. 快光慢光的产生原理及群速度相速度的定义
  16. Unix平台下的常用命令技巧之资源与性能
  17. 傅里叶描述子、HOG特征描述子原理及matlab代码
  18. Linux通过Nodejs的IPP库实现自动定时打印
  19. html设置表格的长款英文,HTML表格中英文和数字换行问题分享
  20. 计算机网络——计算机网络体系结构-计算机网络概述(课程笔记)

热门文章

  1. 工预-Navicat for MYSQL
  2. C++ while(cin>>a) cin输入直到回车结束
  3. 我的独白2017-12-20
  4. 从零开始带你一步一步使用YOLOv3测试自己的数据
  5. em在聊天中是什么意思_聊天时,女人总给你发哦、嗯什么意思?这才是高情商的做法...
  6. python嵌套字典代码_python – 尝试在嵌套字典中查找唯一值的总和. (见例子!)
  7. hangfire 过期记录_韩剧丨顶楼、空洞、再次十八岁、僵尸侦探、青春记录
  8. matlab 3D绘图详解
  9. 调用Com+时提示找不到文件
  10. Thymeleaf 标准表达式语法