首页 > 其他 > 详细

UVA 1347"Tour"(经典DP)

时间:2019-05-30 21:35:05      阅读:131      评论:0      收藏:0      [点我收藏+]

传送门

 

参考资料:

  [1]:紫书

题意:

  技术分享图片

  欧几里得距离????

题解:

  技术分享图片

AC代码:

技术分享图片
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=1e3+50;
 4 
 5 int n;
 6 struct Point
 7 {
 8     int x,y;
 9     bool operator < (const Point& obj) const
10     {
11         return x < obj.x;
12     }
13 }p[maxn];
14 ///dp[i][j]:前i个点全部走过,并且一个人在i点,一个人在j点
15 ///从(i,j)状态到n点所需的最短距离
16 double dp[maxn][maxn];
17 
18 double d(int a,int b)
19 {
20     return sqrt((p[a].x-p[b].x)*(p[a].x-p[b].x)+(p[a].y-p[b].y)*(p[a].y-p[b].y));
21 }
22 
23 double Solve()
24 {
25     for(int i=1;i < n-1;++i)///预处理处dp[n-1][1,...,n-2]
26         dp[n-1][i]=d(n-1,n)+d(i,n);
27     for(int i=n-2;i >= 1;--i)
28         for(int j=i-1;j >= 1;--j)
29             dp[i][j]=min(dp[i+1][j]+d(i,i+1),dp[i+1][i]+d(j,i+1));
30 
31     return d(1,2)+dp[2][1];
32 }
33 int main()
34 {
35     while(~scanf("%d",&n))
36     {
37         for(int i=1;i <= n;++i)
38             scanf("%d%d",&p[i].x,&p[i].y);
39         sort(p+1,p+n+1);
40         printf("%.2f\n",Solve());
41     }
42     return 0;
43 }
View Code

 

UVA 1347"Tour"(经典DP)

原文:https://www.cnblogs.com/violet-acmer/p/10951671.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!