标签:blog for div 问题 c log amp ad size
旅行商问题:
给定一个N节点组成的带权有向图的距离矩阵D(i,j)(INF--没有边),求从定点0出发,经过每个节点恰好一次再返回节点0,所经过的边的权值最小为多少?
范围:
2<=n<=15
dp[k][status]——到达k节点时,已经走过的点的集合为status的最佳答案,status是一个二进制数字表示集合。
利用记忆化搜索的方法进行求解
//正确答案为DP(0,(1<<n)-1)
int DP(int K,int Status)//到达节点K并且已经走过的节点集合为Status的最优值,节点从0开始(0...N-1)
{
if (dp[K][Status]!=INF)
{
return dp[K][Status];
}
//枚举K可到的且存在于Status里的节点V
for (int i=0;i<adj[k].size();i++)
{
edge &e = Edges[adj[k][i]];
int dist = e.dist;
if ((Status<<e.to)&&1)
{
dp[K][Status]=min(dp[K][Status],dp[e.to][Status XOR (1<<e.to)]+dist);
}
}
return dp[K][Status];
}
标签:blog for div 问题 c log amp ad size
原文地址:http://www.cnblogs.com/dandi/p/3990644.html