UVA 1347 Tour - 简单dp
来源:互联网 发布:恋恋有词软件 编辑:程序博客网 时间:2024/05/20 06:56
题目描述
分析:
从左边走到右边,再从右边走到左边,不重复经过点,求最短路。
<=>从左边有两个人一起向右边走,不重复经过点,求最短路。
dp[x][y] : 第一个人在x,第二个人在y点,[1,max(x,y)]的点一定已经走过的最短路。
由于dp[x][y]=d[y][x],规定x>=y
dp[x][y]=min(dp[x][y],dp[x-1][y]+dist[x-1][x])
dp[x][x-1]=min(dp[x][x-1],dp[x-1][k]+dist[k][x]) 1<=k<=i-1
#include<cstdio>#include<algorithm>#include<cmath>using namespace std;#define MAXN 1000int n,a[MAXN+10][2];double dist[MAXN+10][MAXN+10],dp[MAXN+10][MAXN+10];double Getdist(int i,int j){ int x=a[i][0]-a[j][0],y=a[i][1]-a[j][1]; return sqrt(x*x+y*y);}void read(){ for(int i=1;i<=n;i++) scanf("%d%d",&a[i][0],&a[i][1]); for(int i=1;i<=n;i++) for(int j=1;j<i;j++) dist[i][j]=dist[j][i]=Getdist(j,i);}void DP(){ for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) dp[i][j]=1e24; dp[2][1]=dist[1][2]; for(int i=3;i<=n;i++){ for(int j=1;j<i-1;j++) dp[i][j]=min(dp[i][j],dp[i-1][j]+dist[i-1][i]); for(int j=1;j<i-1;j++) dp[i][i-1]=min(dp[i][i-1],dp[i-1][j]+dist[j][i]); } printf("%.2lf\n",dp[n][n-1]+dist[n-1][n]);}int main(){ while(scanf("%d",&n)==1){ read(); DP(); }}
0 0
- UVA 1347 Tour - 简单dp
- Tour - UVa 1347 dp
- UVa 1347 Tour(DP)
- UVa 1347 Tour(DP)
- UVA 1347 Tour DP
- UVa 1347 - Tour(DP)
- UVa 1347:Tour(DP)
- UVA 1347 Tour (经典DP~)
- UVA 1347 Tour(分解DP)
- 例题9-3 UVA - 1347 Tour 旅行(DP)
- UVA 1347 Tour [双调欧几里得TSP问题] [dp]
- uva 1347 - Tour
- UVa - 1347 - Tour
- UVA - 1347 Tour
- uva 1347 tour
- uva 1347 tour
- uva 1347 Tour 旅行
- UVA 1347 Tour
- java工程师最新面试题(线程部分)
- 完美解决IE(IE6/IE7/IE8)不兼容HTML5新标签的方法
- 使用Ivy管理项目中的依赖
- 浅析GLib
- 梳理caffe代码blob(三)
- UVA 1347 Tour - 简单dp
- codeforces 614 A. Link/Cut Tree
- 阿里云上传下载API接口使用,及EF的使用
- Go语言学习(五)流程控制语句
- 重要技术博客记录
- CentOS 7 下安装 SVN (HTTPS + SSH)
- 极光推送Demo学习
- ……
- SonarQube代码质量管理平台安装与使用