最优解一定是将起点.终点以及所有必经点连接成一棵树,对于每条树边恰好走两次,而从起点到终点的一条路径只走一次. 考虑连通性DP,设$f[i][j][k][x]$表示考虑完前$i$个走道,第$i$个走道底部和上部是否存在于树中,底部和上部是否和起点连通,走一次的路径端点是底部还是上部时的最小代价. 时间复杂度$O(NA^2)$. #include<cstdio> const int N=360,inf=100000000; int m,n,A,B,i,j,k,x,a,b,nj,nk,nx,w,v…