摘要:
模型:给一个n个点的无向带权图,求从指定起点出发,经过指定的k个点(顺序不定)最后回到起点的最小代价。数据范围:n<=10^4, m<=10^5, k<15分析:先求最短路,求出从指定的k+1(含起点)个点到其他点的最小代价,然后建立k+1个点之间的最小代价邻接矩阵。最后用状态压缩DP求结果(状态压缩DP参考上一篇)。View Code #include <stdio.h>#include <string.h>#include <queue>using namespace std;#define MIN(a,b) ((a)<(b)?( 阅读全文
摘要:
模型:求n个城市的最短hamilton回路,n<=15。分析:看到n<=15这样的条件容易想到状态压缩DP。hamilton回路其实就是n个城市的一个圆排列,任选一个起点最后的结果都一样,我们不妨设结点0为起点,状态设计也就不难了。状态设计:d[s][last],表示从结点0出发,已经走过的结点构成状态s,最后走的结点为last;状态转移:d[s][last]=MIN(d[ns][k]+g[k][last]),ns为s中去掉last那一位,k为ns中是1的位(不能是起点0);边界:当s中只有2位是1的时候,说明从0结点出发,到达last,所以直接返回g[0][last]。结果:an 阅读全文