hdu5067:Harry And Dig Machine

来源:互联网 发布:泰语发音软件 编辑:程序博客网 时间:2024/06/05 11:40

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5067

参考思路:根据所给矩阵,我们可以建立一个图,图的节点为石头数不为0的节点,还包括矩阵左上角对应的节点,所以节点数不超过11个,节点之间的距离为横坐标之差的绝对值加上纵坐标之差的绝对值,假设左上角的节点对应的编号为0,那么问题便转化成从第0个节点开始,遍历所有的节点,然后再返回到第0个节点的最短路径,根据我们对最短路径的了解,最短路径上的节点除了头尾节点相同外,不可能有节点编号相同的节点。由于节点数最多11个,所以可以用动态规划来求解,对于dp[i][j],i表示一个遍历状态,j表示这个遍历状态以第j个点结尾,比如dp[001101][2],表示这个遍历状态经过了第0个以及第2个、第三个节点,经过的先后顺序不用管,只需知道最后停留的节点,这里为第2个节点。

然后状态转移方程式为:dp[i][j] = min(dp[i][j], dp[i'][j']+distance(j', j) ),其中i = (i' | (1<<j')), j != j',最后答案为result = min(result, dp[(1<<n) - 1][i] + distance(i, 0),其中0<=i<n,n为节点数。


c++源码:

0 0
原创粉丝点击