UVA1347(Tour)(DAG上的动态规划)

uva1347 旅行 不回头旅行商 1. 多路径同起步。 2. 找到解决问题的办法后再找合适的状态和决策,然后状态转换。 3. 不回头,所以可以依次状态转换,若可以回头,则转变为旅行商问题。 阅读详情

UVA1347(Tour)(DAG上的动态规划)

本题的难点主要在于状态的定义,即如何去表示节点的状态。

在紫书中,作者选择了dp(i,j)来表示第一个人走到了i点,第二个人走到了j点,且编号小于max(i,j)的节点都被走过。因为dp[i][j]和dp[j][i]是重复的,因此规定i>j。这样可以保证无后效性,因为小于max(i,j)的点都被选过了,接下来就是在大于max(i,j)里面选点,所以之后的状态不会影响到前面的状态。

接下来考虑状态如何转移,由于状态的定义,下一步只能向编号大于i的节点移动,那么可以是第一个人向前走一步,或者第二个人向前走一步。从而得到状态转移方程:
dp[i][j]=min(dp[i+1][j]+dist(i,i+1),dp[i+1][i]+dist(j,i+1)),其中dist表示两点间的欧几里得距离。

递归起点是dp[2][1]。递归边界时dp[n-1][j],因为此时只剩下最后一个点没有经过,且dp[n-1][j]=dist(n-1,n)+dist(j,n)。

自然,ans=dp[2][1]+dist(1,2)。时间复杂度O为(n2)

#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
int n;
int x[1005];
int y[1005];
double dp[1005][1005];
double dist(int a,int b)
{
	return sqrt((x[b]-x[a])*(x[b]-x[a])+(y[b]-y[a])*(y[b]-y[a]));
}
double d(int i,int j)
{
	if(dp[i][j]!=0)return dp[i][j];
	dp[i][j]=min(d(i+1,i)+dist(j,i+1),d(i+1,j)+dist(i,i+1));
	return dp[i][j];
}
void solve(void)//对于dp[i][j],规定i>j 
{
	memset(dp,0,sizeof(dp));
	double di=dist(n-1,n);
	for(int i=1;i<n-1;i++)
	dp[n-1][i]=di+dist(i,n);
	double ans=d(2,1)+dist(1,2);
	printf("%.2f\n",ans);
}
int main(void)
{
//	freopen("out.txt","w",stdout);
	while(~scanf("%d",&n))
	{
		for(int i=1;i<=n;i++)
		scanf("%d%d",&x[i],&y[i]);
		solve();
	}
//	fclose(stdout);
}
//3
//1 1
//2 3
//3 1
//4
//1 1
//2 3
//3 1
//4 2
GD32F105RBT6 keil工程模板 创建GD32F105RBT6的keil初始基础工程,未来的所有外设驱动都是基于这个基础工程进行扩展。 阅读详情

相关推荐

clumsy一款模拟弱网的工具

利用封装 Winodws Filtering Platform 的WinDivert 库, clumsy 能实时的将系统接收和发出的网络数据包拦截下来,人工的造成延迟,掉包和篡改操作后再进行发送。无论你是要重现网络异常造成的程序错误,还是评估你的应用程序在不良网络状况下的表现,clumsy 都能让你在不需要额外添加代码的情况下,在系统层次帮你达到想要的效果。

klb5555的专栏 2551

UVA - 1347 Tour(双调旅行商问题)

UVA - 1347 Tour 题目 旅行商问题描述:平面上n个点,确定一条连接各点的最短闭合旅程。 题目按照x递增顺序给出,各点x不同。 分析 动态规划 题目说从最左端走到最右端,再返回最左端。可以想象成两个人同时从最左端沿着两条不同路径走到最右端,保证每个点走到一次,则他们两个的路径相加最短就是答案。 最难的就是定义状态,状态定义的好坏直接影响题目的解决 将题目给出的点按 x 大小编号 1 ...

Stormjing的博客 605

MRI图像切片(nii格式转2D)

代码参考:将一个MRI(nii格式)数据进行切片 想要批量抽取MRI数据的几个切片,借鉴了上述代码的Python版本,原始代码抽取了全部切片。本次实验主要是抽取sMRI的横断面(axial)方向的其中30张切片,数量根据自己需求可自行设置。 import scipy, numpy, shutil, os, nibabel import sys, getopt import imageio def niito2D(filepath): inputfiles = os.listdir(filep

chs_502的博客 7549

UVA1347

题意: 思路;         一看图形以为几何(我在看dp啊),看了题解才明白,

清澈不在远方 717

DDR5内存Training全解析:从信号完整性到CS训练模式的实战指南

本文深入解析了DDR5内存Training的全过程,从信号完整性挑战到CS训练模式(CSTM)的实战应用。文章详细阐述了Training在DDR5高频时代的关键作用,对比了In-Band与OOB两种架构,并拆解了Intel MRC的核心训练步骤,为硬件与固件工程师提供了诊断与优化系统稳定性的实用指南。

weixin_29252171的博客 1029

ST MCSDK V6.2.0实战:手把手教你配置HSO-ST观测器,体验500ms收敛的电机无感控制

本文详细介绍了ST MCSDK V6.2.0中HSO-ST观测器的配置方法,实现500ms内电流收敛的无感电机控制。从环境搭建、核心参数解析到无感启动优化,提供实战技巧和性能调优策略,帮助开发者快速掌握高效电机控制技术。

weixin_28720767的博客 579

UVA—1347 (经典动态规划)Tour

原题链接: https://vjudge.net/problem/UVA-1347/origin 测试样例 Sample Input 3 1 1 2 3 3 1 4 1 1 2 3 3 1 4 2 Sample Output 6.47 7.89 题意: 给定你nnn个横坐标xxx,递增的点。需要你设计一条最短欧几里得距离路线,要求从最左边的点出发,走到最右边的点之后再返回,且除了最左边的点和最右边的点之外的每个点都只走了一次。 解题思路: 这道题是一道经典的动态规划题目。如果我们按题目意思去思考那很难

pursuit的博客 795

17、扩展景深成像的瞳孔函数工程技术解析

本文详细解析了扩展景深成像的关键技术,包括基于焦距堆栈的数字处理方法、立方相位掩模的光学设计、对数非球面透镜的应用以及旋转点扩散函数的深度编码功能。通过实验验证和实际应用分析,展示了这些技术在显微镜成像、工业检测和医疗影像中的广泛用途及优势。同时探讨了未来发展方向,如智能算法优化、新型光学材料和多模态成像技术,为相关领域的技术创新提供了参考。

y2z3a4b5c的博客 168

UVA1347 旅行 Tour (样例解释 + 思路心得 + 代码)

思路和心得都在代码里, 快去看看吧

这个人是一个c++修狗 466

【OpenClaw从入门到精通】第09篇:企业级实践——将OpenClaw接入钉钉,打造7×24小时数字员工(2026实测版)

本文聚焦OpenClaw的企业级落地实践,以“招聘数字专员”为核心场景,完整演示从钉钉接入到全流程自动化的实现路径。内容涵盖企业级部署架构设计、前置环境搭建、核心技能开发、流程串联、安全权限管控及运维监控六大模块,详解简历解析、岗位匹配、外呼集成、CRM同步、日历提醒等关键技能的构建逻辑与代码实现。借鉴中关村科金、网易智企的企业级实践经验,重点突破企业知识融合、安全权限管控、业务系统连接三大核心门槛,提供可直接参考的配置示例与操作步骤。所有技术方案均基于公开文档与实测验证,兼顾新手入门与进阶实操。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1170

使用 MATLAB/Simulink + Simscape Electrical 构建一个他励直流电机的启动与制动过程仿真模型

直流电机在工业控制、电动车辆、自动化设备中广泛应用。其中,他励直流电机(Separately Excited DC Motor)因其励磁绕组与电枢绕组分别供电,具有良好的调速性能和启动特性,常用于需要平稳启动和精确控制的场合。在实际应用中,电机的启动过程和制动过程对电网、机械系统以及电机本身都具有重要影响。因此,仿真分析他励直流电机的启动与制动特性,是电机控制设计的重要环节。本文将详细介绍如何使用构建一个他励直流电机的启动与制动过程仿真模型,并通过仿真分析其动态响应。本文详细介绍了如何使用构建一个。

amy_mhd的博客 231

UVA-1347(dp)

Tour UVA - 1347 问题描述: 输入输出说明: 思路: //规定i>j dp[i][j]表示第一个人走到位置i,第二个人走到位置j,还所需要走的最小距离; dist(i,j)表示i,j两个位置之间的距离; //要么第一个人走到i+1,要么第二个人走到i+1, dp[i][j]=min(dp[i+1][j]+dist(i,i+1),dp[i+1][i]+dist(j,i+1)); ac code: #include<bits/stdc++.h> using namespace

雪岩的博客 582

鲁棒优化 (Robust Optimization) 算法详解及案例分析

鲁棒优化是一种用于处理不确定性优化问题的方法。其目标是在不确定性参数的可能取值范围内,找到一个对不确定性具有鲁棒性的解。

闲人编程的博客 4328

UVA1347 - Tour (DAG上的DP)

题目链接http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4093 【题意】

转移到dawxy.com 1172

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

UVA 1347 Tour

https://cn.vjudge.net/problem/UVA-1347 题目 给定平面上 $n$($n\leqslant 1000$)个点的坐标(按照 $x$ 递增的顺序给出。各点 $x$ 坐标不同,且均为正整数),你的任务是设计一条路线,从最左边的点除法,走到最右边的点后再返回,要求除了最左点和最右点之外每个点恰好经过一次,且路径总长度最短。两点间的长度为他们的欧几里得距离。...

110

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

*UVA - 1347 Tour (DAG上的动态规划)

题目链接:UVA - 1347 Tour #include &lt;bits/stdc++.h&gt; using namespace std; struct node { double x, y; }a[1005]; double dis(int i, int j) { return sqrt((a[i].x - a[j].x) * (a[i].x - a[j].x) + (...

Miracle_QSH的博客 698

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Tour UVA - 1347 旅行 DAG

题目链接 给定平面上n(n≤1000)个点的坐标(按照x递增的顺序给出。各点x坐标不同,且均为正整数),你的任务是设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外每个点恰好经过一次,且路径总长度最短。两点间的长度为它们的欧几里德距离,如图9-4所示。 【分析】        “从左到右再回来”不太方便思考,可以改成:两个人同时从最左点出发,沿着两条不同的路...

Nicolas的博客 483

UVA 1347 Tour(DP) 紫书训练

题目链接:UVA 1347 做题感受:看到题自己想没啥思路,也想不出将一人来回改成两人同时走到终点,自己本来的想法是构造一个三维数组dp[i][j][0]和dp[i][j][1]分别表示过去和回来的状态,但是写到后面发现状态转移方程写不出来,不知道该怎么转移,感觉主要还是状态转移方程太难写,结合lrj的分析和别人的博客分析最后才勉强写出来了。(其实我真没看出来这跟DAG有特别大关系,我就觉得勉勉强强搭上边) (感觉思路分析太长的还是直接看概括吧,个人感觉自己思路分析写的不太好) 思路: 紫书上写的挺明白了,

m0_52834059的博客 181

例题 9-3 旅行(Tour, ACM/ICPC SEERC 2005, UVa1347)

原题链接:https://vjudge.net/problem/UVA-1347 分类:DAG 备注:经典问题 #include<bits/stdc++.h> using namespace std; const int maxn=1e3+5; struct Point{ int x,y; }p[maxn]; int n; double dis[maxn][maxn],res[maxn][maxn]; double dp(int i,int j){ if(res[i][j]!=0

TK_wang_的博客 423

[DAG] Tour UVa1347

题意 有n个点,以x值的大小顺序给出。求从第一个点(最左端的点)出发,到最后一个点(最右端的点),再返回第一个点的最短路径长度,要求每个点都只能经过一次。 题解 感觉这题的思维量特别大,独立做不容易想。状态和状态转移方程确定的很巧妙。 本题的状态有两个变量,设表示1~都已经走过,且目前在i和j处还需要走的最短长度。 对于该题,我有几点想法(当然日后可能打脸) 1. 对于一个较为困难的问...

loyxCCS的博客 296

Uva 1347 tour(DAG)

题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=38898 题意:有n个点的坐标(n 解法:请见紫书(算法竞赛入门经典 第二版) P269 总结:对于求最大和最小,并且是DAG。我们可以采用dp的思想。先写出更新方程,然后根据情况采用记忆化搜索或者刷表法更新。 AC: #include #include

longshanxiaoxuesheng的博客 404

Tour UVA - 1347 (旅行,dp)

John Doe, a skilled pilot, enjoys traveling. While on vacation, he rents a small plane and starts visiting beautiful places. To save money, John must determine the shortest closed tour that connects h...

tomjobs的博客 408

Tour UVa 1347 (DAG)

本题难在设置状态表示。 题目要求先从左到右,再从右到左沿x轴方向经历坐标系上的点(1~n点),可以考虑成两条路径,分别从最左到最右,分别经历不同点且不能重合(除了起点和终点)。可以想到用$d(i,j)$表示一条路走到了$i$,一条路走到了$j$。因为两条路加起来要cover路径上所有点,所以$d(i,j)$可以表示$max(i,j)$和之前的点已经全被走过,还需走多远才能满足条件。因为两条路没有...

weixin_30699463的博客 108

UVa 1347 - Tour(动态规划)

按照横坐标递增的顺序给出1≤n≤1000个点的坐标,求从左边走到右边再走回来,除了两端的点每个点恰好经过一次的走法的距离和。 书上给出了详细的思路,把问题抽象成两个人从一端走到另一端最短距离和。 状态转移方程为:d(i,j)=min(d(i+1,i)+dist(i+1,j),d(i+1,j)+dist(i+1,i)) 边界为:d(n-1,j)=d(n,i)+d(n,j)

wcr1996的专栏 1760

Uva 1347 旅行

DP

Luckfort 446

[动态规划] UVa1347 旅行 (DAG的固定起点终点的最短路)

题目 思路 1.抽象(神乎其技):由于从左到右不方便思考,可以将问题转换为,两个人同时从最左点出发,沿着两条路径走,最后都走到最右点,并且除了起点和终点外每个点恰好被一个人走过。 2.状态定义:(i,j),表示1~i已经全部走过,且两个人分别位于i,j(i&gt;j)。 3.指标函数:d(i,j),还需要走的距离。 4.状态转移方程: d(i,j)=min(d(i+1,j)+d...

OI - IceCab 1213
上一篇: UVA1025(A Spy in the Metro) DAG上的动态规划
下一篇: UVA 12563 (劲歌金曲)(多条件最优的动态规划问题)(01背包
WedsonLin
博客等级 码龄7年 1粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值