给定一张
Hamilton 路径的定义是从
第一行输入整数
接下来
对于任意的
输出一个整数,表示最短 Hamilton 路径的长度。
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,即题目所求