状态定义:
如果我们去过城市1,去过城市2,没去过城市3,那么可以表示为110,即5
定义fi,j=状态(即二进制状态对应的十进制数)为i,目前在j号城市的路程花费最小值。
同时定义:
ai,j为从i到j的路径长度
状态转移方程可以沿用Floyd算法的思想。
枚举i为状态,j和k是起点和终点
dp[k∣2j−1][j]=max(dp[k∣(2(j−1))][j],dp[k][i]+a[i][j])
最后答案应该为
min(dp[2n−1][i]+a[i][S](1≤i≤n)(i=S))
此处:
2n−1=i=1∑n−12i
所以,状态为2n−1,意思即为,所有的二进制位都是1,加和才会为2n−1
容易证明,在第一个参数——状态的每一位都会有0和1两种情况,共2n种。第二个参数——目前所在的城市共有n种情况。