一个月前写的了。。。。
首先双调TSP:hdu2224
给出平面上的N个点(1~N) 从 1 号点出发走到最右端的点 N 再返回 1 要求中途不能重复走某个点而且必须把所有点全走一遍 求最小的总路径
这个东西不是NPC 算导上有介绍O(N ^ 2)的算法。
dp[ i ][ j ]来表示从 1 到 i 以及从 1 到 j 的最小总路径 (i < j)
转移:
①当 i < j - 1时,dp[ i ][ j ]=dp[ i ][ j - 1 ]+dis[ j - 1 ][ j ]很显然由于i < j-1 ,dp[ i ][ j ]只能来源于dp[ i ][ j - 1 ]。
②当i = j - 1 时,dp[ j - 1 ][ j ]就可以来源于dp[ k ][ j -1 ] + dis[ k ][ j ](k < j - 1)
void solve()
{
dp[1][2] = dis[1][2];
for(int j = 3; j <= N; j++)
{
for(int i = 1; i < j - 1; i++)
{
dp[i][j] = dp[i][j-1] + dis[j - 1][j];
}