多段图的最短路
单向TSP问题
状态:从[i][j]开始的最小开销
转移:dp[i][j]=min(dp[i+1][(j-1)%m],dp[i][j+1],dp[i+1][(j+1)%m]
现在的问题是,我们如何求出字典序最小?
有个规律请牢记:
正序前驱最小,逆序后继最小。
换句话说,逆推可以保证字典序最小。
可能有些不太明白是什么意思,不过我们不妨设想一下,逆推就是从后往前,所以这样才能保证字典序。
具体实现上,十分神奇:
int row[3]={i,i-1,i+1};
if(i==0) rows[1]=m-1;
if(i==m-1) rows[2]=0;
sort(rows,rows+2);
dp[i][j]=INF;
for(int k=0;k<3;++k){
int v=dp[rows[k]][j+1]+a[i][j];