P1523 旅行商简化版 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
这是一道很有启发意义,代表性的难题
欧几里德旅行商(Euclidean Traveling Salesman)问题也就是货郎担问题一直是困扰全世界数学家、计算机学家的著名问题。现有的算法都没有办法在确定型机器上在多项式时间内求出最优解,但是有办法在多项式时间内求出一个较优解。
为了简化问题,而且保证能在多项式时间内求出最优解,J.L.Bentley 提出了一种叫做 bitonic tour 的哈密尔顿环游。它的要求是任意两点 (a,b) 之间的相互到达的代价 dist(a,b)=dist(b,a) 且任意两点之间可以相互到达,并且环游的路线只能是从最西端单向到最东端,再单项返回最西端,并且是一个哈密尔顿回路。
本题为著名的 NPC 难题的简化版本。
现在笛卡尔平面上有 n(n≤1000) 个点,每个点的坐标为(x,y),(−231 第一行一个整数 n。 接下来 n 行,每行两个整数 x,y,表示某个点的坐标。 输入中保证没有重复的两点,保证最西端和最东端都只有一个点。 一行,即最短回路的长度,保留 2 位小数。 输入 #1复制 输出 #1复制 《算法导论(第二版)》 15-1 题目意思:给定一堆点,求从左到右两天不相交的路径(起点和终点除外)的最小权值和。 将点按横坐标排序;将集合划分为 f[i][j] 两个不从不漏的子集,表示:第一条路经以第 i 个点为终点,第二条路径以第 j 个点为终点,且除起点外严格不相交的两条路经的权值的最小值。 由于 f[i][j]==f[j][i],所以我们让 i>j; 根据划分的含义,状态 f[i][j] 可由一下状态转移而来: 当 i>j+1 时:f[i-1][j]; 我是用的是顺推的方式,这里介绍一个更简洁的逆推的方法:题解 P1523 【旅行商简化版】 - 梦想家的憩息所 - 洛谷博客 (luogu.com.cn)输入格式
输出格式
输入输出样例
7
0 6
1 0
2 3
5 4
6 1
7 5
8 2
25.58
说明/提示
题目来源
解析:
当 i=j+1 时:f[j][k] (k=1,……,j-1);