UVA 1347 Tour

2023-11-19

描述

Click Here
\quad 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序给出。各点x坐标不同,且均为整数),你的任务是设计一条路线,从最左边的点出发走到最右边的点再返回,要求除了最左边和最右边之外,每个点恰好经过一次,且路径总长度最短,两点间的长度为它们的欧几里得距离。
在这里插入图片描述

题解

1)定义状态

\quad “从左到右再回来”不太方便思考,可以改成:两个人同时从最左点出发,沿着两条不同的路径走,最后都走到最右点,且除了起点和终点外其余每个点恰好被一个人经过。这样,就可以用 dp(i,j)表示第一个人走到i,第二个人走到j,还需要走多长的距离。

2)状态转移

\quad 状态如何转移呢?仔细思考后会发现:好像很难保证两个人不会走到相同的点。例如,计算状态dp(i,j)时,能不能让i走到i+1呢?不知道,因为从状态里看不出i+1有没有被j走过。换句话说,状态定义不好,导致转移困难

\quad 下面修改一下:dp(i,j)表示1~max(i,j)全部走过,且两个人的当前位置分别是i和j,还需要走多长的距离 。不难发现dp(i,j)=dp(j,i),因此从现在开始规定在状态中i>j。这样,不管是那个人,下一步只能走到i+1,i+2,…这些点。可是,如果走到i+2,情况变成了“1~i和i+2,但是i+1没走过”,无法表示成状态!怎么办?禁止这样的决策!也就是说,只允许其中一个人走到i+1,而不能走到i+2,i+3,…。换句话说,状态dp(i,j)只能转移到dp(i+1,j)或者dp(i,i+1)【由于i>j,而dp(i,j)=dp(j,i)】,所以 状态dp(i,j)只能转移到dp(i+1,j)或者dp(i+1,i)

\quad 可是这样做产生了一个问题:上述“霸道”的规定是否可能导致漏解呢?不会。因为如果第一个人直接走到了i+2,那么他再也无法走到i+1了只能依靠第二个人走到i+1.既然如此,现在就让第二个人走到i+1,并不会丢解。

3)边界条件

\quad 边界是dp(n-1,j)=dist(n-1,n)+dist(j,n)

由于不知道具体的计算次序,使用记忆化搜索方式

更详细请参考:https://blog.csdn.net/qq_28236309/article/details/51931816

代码

#include <bits/stdc++.h>

#define INF 0x3f3f3f3f
#define eps 1e-6
typedef long long LL;
const double pi = acos(-1.0);
const long long mod = 1e9 + 7;

using namespace std;

int N;

struct data
{
    double x,y;
}a[1005];

double dp[1005][1005];

double dist(int i,int j)
{
    return sqrt( (a[i].x - a[j].x) * (a[i].x - a[j].x) +
                 (a[i].y - a[j].y) * (a[i].y - a[j].y) );
}

double fun(int i,int j)
{
    if(dp[i][j] > 0)
        return dp[i][j];
    return dp[i][j] = min(fun(i + 1,j) + dist(i,i + 1),
                          fun(i + 1,i) + dist(j,i + 1));
}


int main()
{
    int cas = 1;
    while(cin >> N)
    {
        for(int i = 1;i <= N;i++)
            cin >> a[i].x >> a[i].y;
        memset(dp,0,sizeof(dp));
        for(int j = 1;j < N - 1;j++)
            dp[N - 1][j] = dist(N - 1,N) + dist(j,N);
        double ans = fun(1,1);
        printf("%.2f\n",ans);
    }
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UVA 1347 Tour 的相关文章

  • CSU 1333 & Uva 12661 Funny Car Racing【最短路变形+spfa算法,链式前向星建图】

    Funny Car Racing Memory Limit 131072KB64bit IO Format lld amp llu Status Description There is a funny car racing in a ci
  • UVA-11300

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • Foreign Exchange (UVA - 10763)

    include lt iostream gt include lt bits stdc 43 43 h gt define maxn 500002 using namespace std int N1 maxn int N2 maxn in
  • Uva-11768 Lattice Point or Not题解

    知识 xff1a 扩展gcd 题目 xff1a 题目链接 Now a days a very common problem is The coordinate of two points in Cartesian coordinate sy
  • UVa 133 The Dole Queue(圈的下标处理)

    本题难点在于用数组处理圈状物时下标的计算 include
  • UVA-1354 天平难题 题解答案代码 算法竞赛入门经典第二版

    GitHub jzplp aoapc UVA Answer 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 这道题需要 1 遍历二叉树的每种构成方式 我这里每次把当前所有结点列出 然后遍历选取两个组合构成一个新结点 原来的结点剔除 新结点
  • UVA 12166-Equilibrium Mobile(推导结论)

    题目大意 给出一棵二叉树 整个树是天平 每个结点有一个砝码或一个天平 对于任意一个天平 绳子都在中点 每个砝码都有重量 求最少修改多少个砝码的重量使得整个天平平衡 本题的关键在于一个结论 若最终天平平衡 则在同一个深度的所有结点 无论它的祖
  • Uva 489 Hangman Judge

    本题不难 但是我花了一个学期才AC 找到原因后想狠狠地揍自己一顿 原来是输出的一个单词拼错了 一直在解题思路和细节上找问题的我还曾吐槽这是什么脑残游戏 以后需细心 include
  • UVA 401 Palindromes 题解

    Palindromes A regular palindrome is a string of numbers or letters that is the same forward as backward For example the
  • UVa 12955 Factorial

    Problem uva onlinejudge org index php option com onlinejudge Itemid 8 page show problem problem 4834 开始想多了 想着不能简单贪心 要用dp
  • uva 1601 The Morning after Halloween

    题目 The Morning after Halloween 题意 有n个用小写字母表示的鬼和一张地图 每个鬼都要移动到对应的大写字母 两个鬼的位置不能在一次移动中交换 问最少步数 思路 bfs 1 先将地图用图的方法表示 即在每一个空白
  • UVa 120 Stacks of Flapjacks

    Background Stacks and Queues are often considered the bread and butter of data structures and find use in architecture p
  • linux--shell错误:syntax error near unexpected token ‘('

    这几天编写了几个简单的shell程序 然后都出现了syntax error near unexpected token 的错误 然后实在是检查不出错误 后面百度了才找到的原因 之前错误的程序片段如下 usr whoami dr pwd 提示
  • 第八十七题 UVa12166 Equilibrium Mobile

    A mobile is a type of kinetic sculpture constructed to take advantage of the principle of equilibrium It consists of a n
  • Uva 10474 Where is the Marble?(排序与检索)

    本题若掌握了sort 和lower bound 两个函数 就无难点 include
  • uva10105(数论多项式展开公式)

    题意 多项式 x1 x2 xk n 输入n和k 0
  • UVA-11059 最大乘积 题解答案代码 算法竞赛入门经典第二版

    GitHub jzplp aoapc UVA Answer 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 数据量不大 暴力即可 include
  • UVa10881题解报告

    题目 L长的棍子上有n个蚂蚁 他们分别向左或右爬 速度为1 求T时间后各蚂蚁的状态 题解 白书给出了一个很巧妙的解法 将蚂蚁看作质点 相撞掉头等于对穿而过 因为掉头所以 他们最后的顺序与输入时在棍子上的顺序相同 所以只要记录下初始状态下蚂蚁
  • UVA 1347 Tour

    描述 Click Here quad 给定平面上n n lt 1000 个点的坐标 按照x递增的顺序给出 各点x坐标不同 且均为整数 你的任务是设计一条路线 从最左边的点出发走到最右边的点再返回 要求除了最左边和最右边之外 每个点恰好经过一
  • UVa 1347 Tour

    题目 Tour 题意 来自luogu John Doe想用最小的路程游览完所有目的地 每个目的地都用坐标xi yi表示 任何两目的地的xi都不相同 两目的地之间的路程是两点之间的直线距离 John是这样走的 他从最左边的点开始 然后只能向右

随机推荐

  • (linux系统下)MMCV及MMClassification教程及安装问题解决

    说一下依托关系 MMCV是面向计算机视觉的一个基础库 它支持OpenMMLab的各个模块包括MMClassification图像分类 MMDetectionm目标检测 MMOCR文字检测识别等等 本文主要详细介绍一下mmcv和mmcls的安
  • Java分页(支持多种数据库)

    最近研究了下分页 做个总结 1 数据库操作类 做简单封装 DB java package Test import java sql public class DB 加载驱动 static try Class forName com mysq
  • 高速电路设计与仿真之PCB篇(一)

    在电子系统中 信号线的传输需要一定的时间 已经证实 电信号在分布良好的导线中传输速度为3 10 8m s 假设布线长度为5米 则信号的传输需要17ns 这种延时在低速系统中可以被忽略 但在高速电路中就不能忽略了 因此在设计高速PCB时 信号
  • c语言开发题库管理系统,c语言程序设计_题库管理系统.doc

    c语言程序设计 题库管理系统 程序设计基础课程设计报告 班 级 计算机科学与技术1103班 姓 名 杨广宇 指导教师 胡宏涛 完成日期 2012年9月6日 题目 1 设计题目与要求 简要介绍课程设计题目内容与要求 1设计内容 要求输入试题
  • unity实现相机位置移动

    在unity场景中经常有通过键盘中W S A D Q E等按键控制相机移动的需求 相机位置更新 控制代码如下 private void Update if active return Translation if enableTransla
  • python 官网下载地址

    python 官网下载地址 http www python org download 暂时只有 Python 2 7 5 和 Python 3 3 2 版本 支持32 64位 python 2 75 32位 http www python
  • 数据结构小白之插入排序算法

    1 插入排序 1 1 思路 将n个需要排序的元素看成两个部分 一个是有序部分 一个是无序部分 开始的时候有序表只有一个元素 无序表有n 1个元素 排序过程中每次从无序表中取出元素 然后插入到有序表的适当位置 从而成为新的有序表 类似排队 如
  • 查询树形目录(内存遍历成树返回)

    实体 Data TableName dtp sm servicetype ApiModel value SmServicetype对象 description 服务类型 EqualsAndHashCode callSuper true pu
  • 【网站系列】3. 如何部署一个动态博客

    这里说一下动态博客网站 动态博客首当其冲的是WordPress了 这是一个使用LAMP经典架构的网站项目 经久不衰 动态网站相比静态网站来讲复杂的多了 需要引入动态语言 如PHP Java Python这些 一般都数据存储也不会直接放磁盘
  • ostream_iterator详细解析

    ostream iterator属于I O流STL适配器 用于获取一个元素 同时保存在缓冲器中 可以供Cout输出 如果把cout看做成一个对象 那么在Cout对象当中存在一片用于数据存储的区域 ostream iterator在STL中一
  • [机器学习与scikit-learn-50]:特征工程-特征选择(降维)-5-二级过滤-特征值与标签之间的关系:F过滤与互信息量法过滤

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 124080785 目录 前言 第1章
  • tomcat如何配置context的docBase

    docbase是web应用和本地路径 path是tomcat访问这个应用的URL路径 Tomcat的项目部署方式有以下三种 1 直接把项目复制到Tomcat安装目录的webapps目录中 这是最简单的一种Tomcat项目部署的方法 也是初学
  • HDLBits刷题_Verilog Language_Procedures_Alwaysblock1

    学习内容 Since digital circuits are composed of logic gates connected with wires any circuit can be expressed as some combin
  • VMWARE虚拟机更新Ubuntu卡在登陆界面的问题解决

    昨天在搭建开发环境的时候 需要安装一些图形包和升级系统的组件 升级重启后 发现系统进不去了 如下图所示 我的是VMWARE虚拟机 不存在独显驱动问题 所以排除这个问题 将lightdm组件重新装一次 问题可以解决 步骤如下 1 重启 看到如
  • Cuda Streams的概述(四)-- 同步

    同步 同步的APIs 同步所有的事情 阻塞host端 直到所有的CUDA调用完成 cudaDeviceSynchronize 同步主机端特定的流 阻塞host端 直到流里的CUDA调用完成 cudaStreamSynchronize str
  • PyQt开发样例: 利用QToolBox开发的桌面工具箱Demo

    老猿Python博文目录 专栏 使用PyQt开发图形界面Python应用 老猿Python博客地址 一 引言 toolBox工具箱是一个容器部件 对应类为QToolBox 在其内有一列从上到下顺序排列的标签部件项 tabbed widget
  • (转)AI技术能给金融带来什么

    AI技术能给金融带来什么 2017 04 13 今日投资官微 来源 维基百科 文因互联分析 人工智能的热潮被AlphaGo带到顶点 然而在人工智能的学科发展史上是有繁荣期和稳定期的 一个技术突破会带来一定时期内难以想象的繁荣 之后的科学发展
  • [Hadoop] 实际应用场景之 - 阿里

    http blog csdn net u010415792 article details 9151475 Hadoop在淘宝和支付宝的应用从09年开始 用于对海量数据的离线处理 例如对日志的分析 也涉及内容部分 结构化数据等 使用Hado
  • 阿里老哥独家珍藏的Java面试突击宝典,轻松应对95%秋招面试题

    临近秋招 想必有不少老哥已经在为面试做准备了 大家想必也知道现在面试就是看项目经验 基本技术 个人潜力 也就是值不值得培养 总之就是每一次面试都是对我们能力的检验 无论是软实力还是硬实力 软实力其实就是简历包装 自我介绍 与面试官交谈技巧等
  • UVA 1347 Tour

    描述 Click Here quad 给定平面上n n lt 1000 个点的坐标 按照x递增的顺序给出 各点x坐标不同 且均为整数 你的任务是设计一条路线 从最左边的点出发走到最右边的点再返回 要求除了最左边和最右边之外 每个点恰好经过一