我本最早使用了一种状态压缩,仅仅考虑之前到达下一点之前所经历的状态
int p=1<<(i-1),tmpstate;
tmpstate=p|state;
tmpsum=ans[state]+dis;
if(tmpsum<ans[tmpstate])
{
ans[tmpstate]=tmpsum;
map[i]=1;
dfs(k+1,tmpstate,n,i);
map[i]=0;
}
而我在查看题解后发现,所记录的状态不仅要包括之前所经历的,还有现在的选择
int p=1<<(i-1),tmpstate;
tmpstate=p|state;
tmpsum=ans[state][last]+dis;
if(tmpsum<ans[tmpstate][i])
{
ans[tmpstate][i]=tmpsum;
map[i]=1;
dfs(k+1,tmpstate,n,i);
map[i]=0;
}
然而第一种状态压缩的错误之处,我无法得知,希望各位能告诉我。