O(1) 的小乐

Job Hunting

公告

记录我的生活和工作。。。
<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

统计

  • 随笔 - 182
  • 文章 - 1
  • 评论 - 41
  • 引用 - 0

留言簿(10)

随笔分类(70)

随笔档案(182)

文章档案(1)

如影随形

搜索

  •  

最新随笔

最新评论

阅读排行榜

评论排行榜

[导入]Bitonic Path POJ 2677
     直接描述问题吧,通常意义上的TSP (Traveling Salesman Problem)是一个NPC问题,要求遍历所有的城市一遍,然后回到原点,旅程最短。这个问题没有多项式算法的。      如果我们把问题限定在欧式平面内,则成为欧几里得旅行商问题(NPC问题)    J.L.Bentley 建立使用bitonic tour 来简化问题,这种旅程即为从最左边的点开始,严格按照从左到右的顺序到达最右边的点之后又严格按照从右到左的顺序回到出发点,这个问题存在O(n^2)的动态规划算法!    其实想法还是挺直观的,把所有的元素按照x坐标排序(题目假设X坐标是相异的),然后从中间分开之后,我们把左边的所有元素看成是一个状态,这个状态的描述可以这样来dp[i][j],(i<j) 代表的是以i为一条路径的端点到起点,然后以j为一条路径的终点的最短路程。而这两条路径中,哪条是回去的,哪条是出来的是无所谓的!      很显然,状态转移方程是 dp[i][j]=DP[i][j-1]+|Pj-1 Pj|  i<j-1 dp[i][j]=min(dp[k][i]+ |PkPj|) i=j-1 最后我们需要求的是dp[n][n],一个直观的思路是枚举dp[k][n]+|PkPn|,实质上只要搞dp[n-1][n]就OK啦!!想想为什么,这个很trick的   以上理解了题意想出了dp的思路,写出了转移方程,然后搞状态空间,很显然通过转移方程可以写出来,写出了状态空间的转移关系,就可以编程实现了! 直接上代码吧。。。能够比较清楚的看到! 转载自http://www.cppblog.com/doer-xee/archive/2009/11/30/102296.html 有所修改! #include <iostream> #include <cmath> using namespace std; #define INF 0×7fffffff #define N 201 struct point{     double x, y; [...]
文章来源:http://www.lxlsosi.tk/2011/05/05/bitonic-path-poj-2677/

posted on 2011-05-05 20:07 Sosi 阅读(516) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


统计系统