标签: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