Uva 1347 旅行
来源:互联网 发布:移动4g网络差 编辑:程序博客网 时间:2024/06/05 05:55
Description
给定平面上n个点,设计一条路线,从1号点出发,走到n号点在走回来,除了最左边的点,其他每个点恰好经过一次,且是的路径总长最短。两点之间的路径长度为欧几里得距离(就是直线距离)。
Solution
处理从1号点走到n号点在走回来的情况很复杂,所以我们可以假设有2个人一起走,并且走的点不重复。
设
所以设
那么可能是第一个人走到i+1或是第二个人走到i+1。
所以转移变成了
但这样还是有弊端。
所以强制i>j。
所以
为什么这样是对的?
在进行点i+1的更新时,我们可以假想是哪个人选了第i+1个点。这个记录过程类似于背包。那么
所以可以强制i>j.
Code
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#define N 5010#define DB double#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--)using namespace std;DB f[2][N];int i,j,k,l,n,o;DB x[N],y[N];DB dis(int a,int b){ return sqrt((x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b]));}int main(){ scanf("%d",&n); fo(i,1,n) scanf("%lf%lf",&x[i],&y[i]); fo(j,1,n-1) f[o][j]=dis(n,n-1)+dis(n,j); fd(i,n-2,2){ o=1-o; fo(j,1,i-1) f[o][j]=min(f[1-o][j]+dis(i+1,i),f[1-o][i]+dis(i+1,j)); } printf("%.4lf",f[o][1]+dis(1,2)); return 0;}
阅读全文
2 0
- uva 1347 Tour 旅行
- Uva 1347 旅行
- UVA 1347 Tour 双调旅行商
- UVA 10137 旅行
- UVa 1347 例题9-3 旅行 (双调欧几里得旅行商问题)
- uva 1347 - Tour(双调欧几里得旅行商问题)
- UVA 1347 Tour(双调欧几里得旅行商问题)
- UVA - 1347 Tour 双调欧几里得旅行商问题
- uva 1347(双调欧几里得旅行商问题)
- 例题9-3 UVA - 1347 Tour 旅行(DP)
- 记忆化搜索,动态规划(旅行,uva 1347)
- UVA 1347 Tour(双调欧几里得旅行商)
- 双调欧几里得旅行商问题 UVA 1347 Tour
- UVA 1347 Tour (双调欧几里得旅行商问题)
- UVA 10137 - The Trip(旅行)
- UVa Q10137: The Trip (旅行)
- 旅行 The Trip, 2007 UVA
- UVA 1347(POJ 2677) Tour(双调欧几里得旅行商问题)
- 基于CUDA在GPU上实现膨胀、腐蚀加速
- 关于201709CSP的总结
- poj1789 Truck History
- ElastAlert对ELK日志进行邮箱报警
- hibernate 初步
- Uva 1347 旅行
- Vue项目 build构建
- 面试题
- 《零基础入门学习python》学习过程(四)
- 数据结构-线性表-顺序表
- Bootstrap使用总结
- iframe父页面获取子页面元素,子页面获取父页面元素
- SGISTL源码探究-STL中的hashtable(下)
- leetcode刷题(2)