题目链接:https://uva.onlinejudge.org/external/13/1347.pdf

这个题和uva 1658题目很像,只是加了一点,就是每个点都要走,刚开始,我以为可以直接拆点,用最小费用流。并不是这样。

题意:n个点,坐标给出,设计一条路线,从最左边的点,走到最右边的点,再回来,除最左边的点和最右边的点外,每个点有且经过一次。求最短距离。

分析:

可以转换一下,是两个人走不同的路线,从最左边的点走到最右边的点。然后d(i,j)表示第一个人在I,第二个人在j时,还需走多长的距离。

但是,这样的定义是很难状态转移的,修改一下。d(i,j)表示1~max(i,j)的点全部都走过,两个人的位置分别是I,j还需要走多远,这样就有d(i,j) = d(j,i),这里我们默认i>j。

状态转移,i,j;两个位置下一步一定有一个人走到i+1,假如走到I+2……这样i+1点就没有走过,不能表示该状态。

也就是说,转移方程就出来了d(i,j) 下一步只有两种决策,要么是i走到i+1,要么是j走到 I+1;

边界条件是d(n-1,j) = dist(n-1,n)+dist(j,n);所求的是dist(1,2) + dp(2,1);

#include <bits/stdc++.h>
using namespace std; double x[],y[];
double dist[][];
double dp[][]; int main()
{
int n;
while(scanf("%d",&n)!=EOF) { for(int i=;i<=n;i++) {
scanf("%lf%lf",&x[i],&y[i]);
} for(int i=;i<=n;i++) {
for(int j=;j<=n;j++) {
dist[i][j] = sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}
} for(int i=n-;i>=;i--) {
for(int j=;j<i;j++) {
if(i==n-)
dp[i][j] = dist[i][n] + dist[j][n];
else dp[i][j] = min(dist[i][i+]+dp[i+][j],dist[j][i+]+dp[i+][i]);
}
} printf("%.2lf\n",dp[][]+dist[][]); } return ;
}

Uva 1347,旅行的更多相关文章

  1. UVa 1347 旅行

    https://vjudge.net/problem/UVA-1347 思路:用d(i,j)表示第一个人走到i,第二个人走到j,还需要走多长的距离.在这里强制定义i>j,并且每次只能走到i+1. ...

  2. ACM - 动态规划 - UVA 1347 Tour

    UVA 1347 Tour 题解 题目大意:有 \(n\) 个点,给出点的 \(x\).\(y\) 坐标.找出一条经过所有点一次的回路,从最左边的点出发,严格向右走,到达最右点再严格向左,回到最左点. ...

  3. 【UVa 1347】Tour

    [Link]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  4. UVa 1347 Tour

    Tour Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Description   Joh ...

  5. UVa 1347 (双线程DP) Tour

    题意: 平面上有n个坐标均为正数的点,按照x坐标从小到大一次给出.求一条最短路线,从最左边的点出发到最右边的点,再回到最左边的点.除了第一个和最右一个点其他点恰好只经过一次. 分析: 可以等效为两个人 ...

  6. UVA - 1347 Tour(DP + 双调旅行商问题)

    题意:给出按照x坐标排序的n个点,让我们求出从最左端点到最右短点然后再回来,并且经过所有点且只经过一次的最短路径. 分析:这个题目刘汝佳的算法书上也有详解(就在基础dp那一段),具体思路如下:按照题目 ...

  7. UVa 11100 旅行2007

    https://vjudge.net/problem/UVA-11100 题意: 给定n个正整数,把它们划分成尽量少的严格递增序列,尽量均分. 思路: 因为必须严格递增,所以先统计每个数字出现的次数, ...

  8. UVA 1347 Tour 【双调旅行商/DP】

    John Doe, a skilled pilot, enjoys traveling. While on vacation, he rents a small plane and starts vi ...

  9. UVA 1347 Tour 双调TSP

    TSP是NP难,但是把问题简化,到最右点之前的巡游路线只能严格向右,到最右边的点以后,返回的时候严格向左,这个问题就可以在多项式时间内求出来了. 定义状态d[i][j]表示一个人在i号点,令一个人在j ...

随机推荐

  1. ActionController::InvalidAuthenticityToken 解决办法(第二种尤其有效)

    第一种:  Ror代码 class FooController < ApplicationController       protect_from_forgery :except => ...

  2. Java基础(36):String与基本数据类型之间的双向转换(Wrapper类)

    Java 中基本类型和字符串之间的转换 在程序开发中,我们经常需要在基本数据类型和字符串之间进行转换. 其中,基本类型转换为字符串有三种方法: 1. 使用包装类的 toString() 方法 2. 使 ...

  3. ofbiz进击 第三节。 各个关键文件的说明与作用

    1.  entityengine.xml   数据引擎文件 用于配置数据库链接设置 <group-map group-name="org.ofbiz" datasource- ...

  4. mac tomcat

    alampsdeMacBook-Pro:bin alamps$ ./startup.sh Using CATALINA_BASE: /Users/alamps/Library/apache-tomca ...

  5. React-Native坑1:Invariant Violation:Application 项目名 has not been registered.

    React-Native坑1:Invariant Violation:Application 项目名 has not been registered. 字数347 阅读1421 评论3 喜欢7 前言 ...

  6. android中影藏状态栏和标题栏的几种方法

    1,在android中,有时候我们想隐藏我们的状态栏和标题栏(如:第一次安装app时候的欢迎界面),实现这些效果有几种方法,随便选取自己喜欢的即可. 2, A:利用代码实现,在我们主Activity中 ...

  7. 夺命雷公狗ThinkPHP项目之----企业网站7之栏目的修改(主要用模型来验证字段)

    我们照老,在控制器里面先查出我们所需要用到的数据: 然后直接遍历到模版上即可: 然后再开始写提交过来的数据处理问题(注意一定要接收修改页面通过隐藏域)而且我们刚才已经写好我们的model层了,所以直接 ...

  8. batch批的概念

    批处理(Batch Requests), 批处理简单理解为同时执行的一批SQL处理语句,一个批处理中可能有多个DML.多个存储过程等等.如在SSMS操作,每个'GO'执行前都属于一个批处理. 注意区分 ...

  9. 关于CentOS 7.1后期维护的问题

    1.问题描述:在使用ssh服务远程登录的时候,当显示输入密码,特别特别的慢,刚刚搭建 服务器的时候还很正常,经过一个假期我实在忍不了它了,故决定解决此问题.服务器系统:CentOS 7.1 解决方式: ...

  10. UISlider控件属性及方法(转)

    初始化一个Slider   UISlider *slider = [[UISlider alloc]initWithFrame:CGRectMake(0, 400,320 , 20)];   访问UI ...