【算法笔记】双调欧几里得旅行商问题
2015-03-03 13:06
337 查看
reference:
1)《算法导论》15-3
2)http://blog.sina.com.cn/s/blog_51cea4040100gkcq.html
将所有点按x坐标从小到大排序后(假设不存在重复)。从左至右标记为0, 1, 2…n-1
那么这问题的关键一个性质是,对于一点i(i > 0)和任意包含它的双调路径,i-1一定是i的前继或者后继。
如果我们假设一个环游的顺序,比如逆时针
f[i][j]f[i][j](i>j)表示从i到0,再从0到j
1)如果i-1是在(i, 0)上,f[i−1][j]f[i-1][j]已经求出来了,再加上(i, i-1)就行了
那么f[i][j]=f[i−1][j]+dist[i−1][i]f[i][j] = f[i-1][j]+dist[i-1][i]
2)如果i-1在(0, j)上,则j=i-1,否则不满足性质。
所以f[i][i−1]=min(f[i−1][k]+dist[k][i]),0<=k<i−1f[i][i-1] = min (f[i-1][k]+dist[k][i]), 0<=k(求最短的情况)
这意味着i向左走遇到的第一个点是k,然后走(k, 0),(0, i-1),这段路径就是f[i−1][k]f[i-1][k]
例题:
poj 2677
1)《算法导论》15-3
2)http://blog.sina.com.cn/s/blog_51cea4040100gkcq.html
将所有点按x坐标从小到大排序后(假设不存在重复)。从左至右标记为0, 1, 2…n-1
那么这问题的关键一个性质是,对于一点i(i > 0)和任意包含它的双调路径,i-1一定是i的前继或者后继。
如果我们假设一个环游的顺序,比如逆时针
f[i][j]f[i][j](i>j)表示从i到0,再从0到j
1)如果i-1是在(i, 0)上,f[i−1][j]f[i-1][j]已经求出来了,再加上(i, i-1)就行了
那么f[i][j]=f[i−1][j]+dist[i−1][i]f[i][j] = f[i-1][j]+dist[i-1][i]
2)如果i-1在(0, j)上,则j=i-1,否则不满足性质。
所以f[i][i−1]=min(f[i−1][k]+dist[k][i]),0<=k<i−1f[i][i-1] = min (f[i-1][k]+dist[k][i]), 0<=k(求最短的情况)
这意味着i向左走遇到的第一个点是k,然后走(k, 0),(0, i-1),这段路径就是f[i−1][k]f[i-1][k]
例题:
poj 2677
相关文章推荐
- 【算法学习】双调欧几里得旅行商问题(动态规划)
- 【算法学习】双调欧几里得旅行商问题(动态规划)
- 【算法学习】双调欧几里得旅行商问题(动态规划)
- 【算法学习】双调欧几里得旅行商问题(动态规划)
- 【算法导论】双调欧几里得旅行商问题
- 【算法导论】双调欧几里得旅行商问题
- 【算法导论】双调欧几里得旅行商问题
- 【算法导论】双调欧几里得旅行商问题
- 算法导论-15-1-双调欧几里得旅行商问题
- POJ 2677 (算法导论15-3)双调欧几里得旅行商问题 dp
- 算法 - 双调欧几里得旅行商问题
- poj 2677 双调欧几里得旅行商问题
- -双调欧几里得旅行商问题
- 2014年百度之星程序设计大赛 - 资格赛 1002 Disk Schedule(双调欧几里得旅行商问题)
- 双调欧几里得旅行商问题
- Disk Schedule HDU - 4824 (双调欧几里得旅行商问题)
- UVA - 1347 Tour 双调欧几里得旅行商问题
- POJ-2677 Tour(双调欧几里得旅行商问题)(动态规划)
- 算法道路 思考题 15-3(双调欧几里得旅行商问题)
- 双调欧几里得旅行商问题-《算法导论》