正题


大意

有n个点,开始只能从前面的点走到后面的点,到达点n后返回,之后就只能从后面的点走到前面的点,从点1出发,要求每个点(除了点1)都必须且只能经过一遍,并回到点1的最短路径。给出每个点的坐标。
有两个点,一个必须在点n之前到达,一个必须在点n之后到达。


解题思路

因为这个可以看成一个无向图,所有我们可以将路径分为去和回两条,然后把回去的路径反过来,这就变成了求两条路径覆盖所有点并且不重复还有两个特殊点。
我们考虑dp,由于数据范围可以n2n2n^2,我们可以用f[i][j]f[i][j]f[i][j]表示第一条路径到达第i个点,第二条路径到达第j个点时的最短路。然后我们每次让i和j交替向前,用一个k表示第i和第j个点先前走的最近距离。
然后动态转移:

f[i][k]=min{f[i][j]+dis[j][k]}f[i][k]=min{f[i][j]+dis[j][k]}

f[i][k]=min\{f[i][j]+dis[j][k]\}

f[k][j]=min{f[i][j]+dis[i][k]}f[k][j]=min{f[i][j]+dis[i][k]}

f[k][j]=min\{f[i][j]+dis[i][k]\}
两个特殊点就保证一个在第一维中没有值一个保证在第二维中没有值就好了。


代码

#include<cstdio>
#include<cmath>
#include<algorithm>
#define N 1010
#define inf 2147483647/3
using namespace std;
double x[N],y[N],dis[N][N],f[N][N];
int n,b1,b2;
double Dis(double x1,double y1,double x2,double y2)
{return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));}
int main()
{scanf("%d%d%d",&n,&b1,&b2);b1++;b2++;for (int i=1;i<=n;i++)scanf("%lf%lf",&x[i],&y[i]);for (int i=1;i<n;i++) for (int j=i+1;j<=n;j++)dis[i][j]=dis[j][i]=Dis(x[i],y[i],x[j],y[j]);//计算距离for (int i=1;i<=n;i++)for (int j=1;j<=n;j++) f[i][j]=inf;//初始化f[1][1]=0;for (int i=1;i<=n;i++)for (int j=1;j<=n;j++){if (i==j&&i!=1)continue;int k=max(i,j)+1;if (k==n+1)//特判{if (i!=n) f[n][n]=min(f[n][n],f[i][j]+dis[i][n]);if (j!=n) f[n][n]=min(f[n][n],f[i][j]+dis[j][n]);continue;}if (k!=b1) f[i][k]=min(f[i][k],f[i][j]+dis[j][k]);if (k!=b2) f[k][j]=min(f[k][j],f[i][j]+dis[i][k]);//动态转移}printf("%0.2lf",f[n][n]);
}

jzoj3510-最短路径【dp】相关推荐

  1. 短小精悍的多源最短路径算法—Floyd算法

    前言 在图论中,在寻路最短路径中除了Dijkstra算法以外,还有Floyd算法也是非常经典,然而两种算法还是有区别的,Floyd主要计算多源最短路径. 在单源正权值最短路径,我们会用Dijkstra ...

  2. Floyd是咋求图的最短路径?

    ????????关注后回复 "进群" ,拉你进程序员交流群???????? 作者丨大赛 来源丨bigsai 前言 在图论中,在寻路最短路径中除了Dijkstra算法以外,还有Flo ...

  3. (建议收藏)一文多图,彻底搞懂Floyd算法(多源最短路径)

    前言 在图论中,在寻路最短路径中除了Dijkstra算法以外,还有Floyd算法也是非常经典,然而两种算法还是有区别的,Floyd主要计算多源最短路径. 在单源正权值最短路径,我们会用Dijkstra ...

  4. 最短路径-dijkstra/floyd

    目录 floyd -dijkstra floyd floyd:用来求所有顶点之间的最短路径问题,求最短路径具体节点顺序,求各点之间最短路径长度 理解floyd: 二维矩阵图,就是不断通过测试新的节点k ...

  5. Exploiting the Syntax-Model Consistency for Neural Relation Extraction(关系抽取,语法模型,跨领域关系抽取

    文章目录 1.Introductiony 1.1 神经网络的关系抽取 1.2使用依赖树的关系抽取 1.2.2 依赖树的一般树 1.3 本文做法 2. 相关工作 2.1核方法 2.2 深度学习方法 2. ...

  6. 【数据结构】思维导图补充知识

    思维导图链接 例题总结链接 排序算法思想和动图 排序算法代码 DS重点 1.⭐⭐必背概念定义: 2.⭐⭐必考解答题: 2.1 绪论: 2.2 线性表: 2.3 栈 2.4 队列 2.5 树和二叉树(必 ...

  7. 多源最短路之大暴力算法(bushi

    前言 Floyd , 一个号称只有五行代码的算法由1978年图灵奖获得者.斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名.该算法有于求一个带权有向图(Wighted Directed Graph)的任 ...

  8. python蓝桥杯真题刷题打卡 | day7

    目录 1. 直线 题目 解析 代码 2. 路径 题目 解析 代码 3. 双阶乘 题目 代码 4. 几个2020 题目 代码 1. 直线 题目 解析 因为要统计不同的直线,所以用直线的性质:斜率和截距 ...

  9. 算法设计手冊(第2版)读书笔记, Springer - The Algorithm Design Manual, 2ed Steven S.Skiena 2008...

    The Algorithm Design Manual, 2ed 跳转至: 导航. 搜索 Springer - The Algorithm Design Manual, 2ed Steven S.Sk ...

  10. 【背赛笔记 常用写法 模版】Python蓝桥杯备赛笔记记录 【建议收藏!】

    目录 Py常用算法技巧 与c++ stl对应结构 排序 heapq 栈 先进后出队列LifoQueue 优先级队列,每次取最小的一个元素PriorityQueue 双端队列deque ,用在bfs提高 ...

最新文章

  1. 2022-2028年中国硝化棉行业市场研究及前瞻分析报告
  2. iOS 模仿微信的照片选择器
  3. 研磨数据结构与算法-06递归的应用
  4. linux iconv函数失败,Linux 编码转换 (iconv失败的解决方法)
  5. 我有做短视频的freestyle,要来一起吗?
  6. vue通信的N种方式
  7. 大数据python试卷_大数据起步--Python语言-中国大学mooc-试题题目及答案
  8. Windows 恢复环境(Windows RE模式)
  9. python实例 87,88
  10. Hadoop学习笔记 ZooKeeper
  11. 百度智呼吸 html5,手机百度 iBreath智呼吸
  12. FA 工业自动化设备设计基础
  13. vivado2017.4开发vc707(virtex7)(一)上电调试
  14. srs信道估计_SRS 上行信道质量测量
  15. 第五模块 常用邮件沟通场景(1):求职信
  16. electron builder 打包错误相关问题
  17. Java String知识复习及补充和包装类
  18. 联想拯救者Y7000系列黑苹果MacOS 12.3.1 Monterey详细安装教程记录
  19. 女朋友撒娇让我教她HashMap
  20. 捕食搜索matlab代码,第8章——捕食搜索算法分析.ppt

热门文章

  1. 苹果白屏一直显示苹果_最新消息显示:苹果还要发新品
  2. xps13安装linux系统,[操作系统]Dell XPS 13 (9360)安装配置 ubuntu 16.04 实现 win10 Linux双系统...
  3. 2010C语言添加背景图片_2019级C语言大作业 - 火柴人试炼之地
  4. HTML坐标不随着屏幕大小改变,HTML热区map坐标,随窗口大小自适应办法(javascript)...
  5. Linux查看设备 eth,lspci grep Eth,查看Linux下的各种硬件设备是否识别或存在之用
  6. python可视化工具好用_6款Python必备的可视化工具推荐
  7. tars框架php,TarsPHP: TARS-PHP是针对php使用tars二进制协议,以及tars平台整体运维、RPC等一系列能力的解决方案...
  8. java 文件监听器_java7 文件监听器
  9. linux find查找文件然后删除,linu查找find命令及删除7天前的文件
  10. C++ using namespace 命名空间的定义与使用