Skip to content

Latest commit

 

History

History

0091

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

题目

给定一张 $n$ 个点的带权无向图,点从 $0 \sim n-1$ 标号,求起点 $0$ 到终点 $n-1$ 的最短 Hamilton 路径。

Hamilton 路径的定义是从 $0$$n-1$ 不重不漏地经过每个点恰好一次。

输入格式

第一行输入整数 $n$

接下来 $n$ 行每行 $n$ 个整数,其中第 $i$ 行第 $j$ 个整数表示点 $i$$j$ 的距离(记为 $a[i,j]$)。

对于任意的 $x,y,z$,数据保证 $a[x,x]=0,a[x,y]=a[y,x]$ 并且 $a[x,y]+a[y,z] \ge a[x,z]$

输出格式

输出一个整数,表示最短 Hamilton 路径的长度。

数据范围

$1 \le n \le 20$

$0 \le a[i,j] \le 10^7$

输入样例:

5
0 2 4 5 1
2 0 6 5 3
4 6 0 8 3
5 5 8 0 5
1 3 3 5 0

输出样例:

18

题解

前置题目:0291

前置知识:位运算

本题知识:动态规划-状态压缩DP

题目分析

哈密顿路径

Q: f[i, j] 是个啥? A: i 表示路径,j 表示终点,f 表示路径是 i 终点是 j 的最小值

Q: 为啥 i 是第一维,j 是第二维度? A: 空间局部性原理

Q: 从 0 走到 j 是什么意思? A: 起点是第 0 个点,终点是第 j 个点

Q: 路径是 i 是什么意思? A: 将整条路径压缩成一串二进制来表示(这一串二进制可以转化成一个十进制的数字 i )。举个例子,001011这个表示的是这条路径经过了 0、1、3 这三个点。

Q: 怎么初始化? A: f[1][0] = 0,路径是00001,只经过第 0 个点,终点是 0,故长度是 0,其他路径长度设为无穷大,保证了起点是 0

Q: 答案是啥? A: f[(1<<n)-1][n-1],路径是11...111,所有点都经过,终点是 n-1,即题目所求