poj 3311(floyd+状态压缩)

来源:互联网 发布:mac平台 编辑:程序博客网 时间:2024/06/05 04:20

题目链接:http://poj.org/problem?id=3311

思路:Floyd + 状态压缩DP  
题意是有N个城市(1~N)和一个PIZZA店(0),要求一条回路,从0出发,又回到0,而且距离最短 (可重复走).
首先不难想到用FLOYD先求出任意2点的距离dis[i][j]  。
接着枚举所有状态,用11位二进制表示10个城市和pizza店,1表示经过,0表示没有经过  。
定义状态DP(S,i)表示在S状态下,到达城市I的最优值  。
接着状态转移方程:DP(S,i) = min{DP(S^(1<<i-1),k) + dis[k][i],DP(S,i)},器重S^(1<<i-1)表示未到达城市i的所有状态,1<=k<=n  。
对于全1的状态,即S = (1<<n)-1则表示经过所有城市的状态,最终还需要回到PIZZA店0  。
那么最终答案就是min{DP(S,i) + dis[i][0]} 。

 

0 0
原创粉丝点击