标签:
问题来源:刘汝佳《算法竞赛入门经典--训练指南》 P61 问题9:
问题描述:有n(n<=15)个城市,两两之间均有道路直接相连,给出每两个城市i和j之间的道路长度L[i][j],求一条经过每个城市一次且仅一次,最后回到起点的路线,使得经过的道路总长度最短(城市编号为0~n-1)。
分析: 1.因为最后走的路线为一个环,可以设城市0为起点城市。
2.将每个城市看作二进制的一个位(1代表有,0代表没有),则数k可以表示一些城市的集合(例如k=13,二进制表示为1101,表示城市0,2,3的集合),我们可以求得k<=2^15-1,令aim=2^15-1;
3.dp[k][j]表示经过了k集合中的所有城市并且以j城市为终点的路径的最小值。则dp[k][j] = Min{dp[k][j],dp[k-i][j]+dis[i][j] | (0<=i<=n-1 && i属于集合k)};(其中k-i表示集合k中去掉数i后的集合(所以i应该是集合k中的元素)),
4.
5.
例题链接:http://acm.fzu.edu.cn/problem.php?pid=2186
例题: fzu 2186
标签:
原文地址:http://www.cnblogs.com/ruo-yu/p/4385291.html