一道状压 DP 题。
发现这道题 n ≤ 12 n \leq 12 n≤12 其实特别小,因此可以考虑状压,而且可以直接邻接矩阵存图。
首先我们发现这道题打通的路径构成的图一定是棵树,而根节点就是起点,因此我们需要知道每一个点距离根节点的距离,也就是深度 d e p dep dep,根节点深度为 0。
设 f i , j , d f_{i,j,d} fi,j,d 表示当前被挖到的最新的点是 i i i,已经连通的点的点集为 j j j(状压为 2 12 − 1 2^{12}-1 212−1),目前已经挖了 d d d 个点的最小花费。
于是我们有以下转移方程:
f v , j , d + 1 = min { f u , j ∣ ( 1 < < ( v − 1 ) ) , d + ( d e p u + 1 ) × e u , v ∣ u → v } f_{v,j,d+1}=\min\{f_{u,j|(1<<(v-1)),d}+(dep_u+1) \times e_{u,v}|u \to v\} fv,j,d+1=min{fu,j∣(1<<(v−1)),d+(depu+1)×eu,v∣u→v}
其中 e u , v e_{u,v} eu,v 是 ( u , v ) (u,v) (u,v) 的边权。
上述转移方程的意义就是我们从所有可达的未选取的点中选取一个,然后进行转移。
发现这个转移方程写成 DFS 的方式会更加合适,因为 DFS 除了可以进行转移以外还可以处理 d e p dep dep 数组,于是我采用记忆化搜索实现。