for(re i=0;i<=(1<<n)-1;++i)//枚举2进制状态
for(re tmp1=i,j=0;tmp1;tmp1>>=1,++j)//find 1 -->j
if(tmp1&1)
for(re tmp2=i,k=0;tmp2;tmp2>>=1,++k)//find 0 -->k
if(!(tmp2&1))
f[i+(1<<k)][k]=Min(f[i+(1<<k)][k],f[i][j]+dis(j,k));
}
这是我打的代码,我的想法是j找已经去过的点,k找还没去过的点,然后用f[i][j]+dis(j,k)走到k点去更新相同二进制状态但多个k的那个状态。
我的想法是对于一个二进制状态i,它所来源的前一个状态因为有一位比它少1,一定比它小,也就是说i已经被所有来源遍历过了,那么它应该已经是最优解了,我再拿它去更新下一个状态
但还是wa了,一直想不懂为什么我的用本状态去更新下个状态不行,而题解由已走过的点更新本状态却能a
求大佬解答qaq