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
Zabbix监控网络设备讲解 Zabbix监控网络设备讲解 本人在研究学习zabbix的时候,网上找过很多如何监控路由,交换,或者是防火墙的文章,但很多都比较散,这里我出一个大概的整合,方便大家参考和学习。本章就拿华三的交换机来做文章。 监控网络设备首先我们需要开启snmp协议,华三怎么开启snmp协议在我的博客里有写到,其次就是找到版本对应的OID,zabbix就是通过抓取设备的OID来做到监控网络设备的,当然zabbix也不仅仅只有通过snmp来监控设备,还有很多别的功能,这些功能我会在以后的博客里面一一更新 文章目录Zab 阅读详情

相关推荐

Zemax操作33--5倍激光扩束器

5倍扩束

lzy750750的博客 2931

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

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

Stormjing的博客 605

USB2.0基础知识总结

目录 1、协议层: 1.1、域分类 1.2 、USB传输方式: 1、协议层: 域和包定义:包是一次传输的单位,每个包由多个域组成; USB中是按照LSB进行字节传输; 1.1、域分类 1.1.1: 同步域(SYNC field) 所有的包都开始于同步域,在低速和全速通信中SYNC field用7个0和1个1来表示。 由于USB2.0使用了NRZI编码(0用翻转来表示,1用不翻转表示),所以00000001就是上图那样。 ...

qq_32938605的博客 4408

UVA1347

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

清澈不在远方 717

自定义串口通讯协议

自定义串口通讯协议的实现方法

qq_44826038的博客 2172

Linux下搭建J-Link调试环境:OpenOCD+GDB实战指南

嵌入式开发中,调试器是连接开发主机与目标硬件的关键桥梁,其核心原理是通过标准协议(如JTAG/SWD)访问芯片内部的调试模块。GDB作为通用的调试客户端,通过远程协议与调试服务器通信,而OpenOCD则扮演了协议转换与硬件驱动的角色,实现了调试命令的翻译与执行。这种开源工具链的组合,为开发者提供了高度的定制化与自动化能力,尤其适合需要与持续集成流程深度结合的复杂项目。在实际应用中,针对特定芯片(如ARM7TDMI)进行正确的内存控制器与时钟初始化是成功调试的前提,这常常涉及对板级支持包的深入理解。本文以S3

weixin_29889665的博客 333

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

港口集装箱码头运营FlexSim仿真

列队4中的集装箱会根据不同类型的集装箱会放置在不同的堆场,因此根据前面对集装箱设置的标签Type的数值不同,设置不同的发送端口。集装箱到达列队3后,会有70%的集装箱到达堆场,30%的集装箱运出港口,因此在Queue列队3的Flow界面设置按照百分比发送端口,其中70%发送到端口1,即发送到列队4等待进入堆场,30%发送到端口2,即发送至出闸口。通过上述对比表格可以看出,当集卡数量在10的时候,岸桥和场桥的设备利用率达到了最高,当集卡数量为12的时候场桥1和场桥3的利用率有所下降,因此综合考虑。

m0_72514516的博客 1331

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

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

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

基于PPT的三维光路结构示意图绘制实例演示-技术细节

基于PPT的三维光路结构示意图绘制实例演示-技术细节

简单光学 7468

UNet 改进(22):结合Transformer结构

保留了UNet的经典编码器-解码器结构在瓶颈层使用Transformer替代传统的卷积层采用跳跃连接保持空间细节信息使用双卷积块(DoubleConv)作为基础构建模块。

2401_82355416的博客 774

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

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

UVA1347 - Tour (DAG上的DP)

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

转移到dawxy.com 1172

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

UVA 1347 Tour

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

110

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

*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

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

uva1347(dp,双调欧几里得旅行商问题)

题意:给出n个点,确定一条连接各点的最短闭合旅程的问题。(将其转换成2个人同时从最左边出发,然后分别经过不同路径到达最右边的距离) 求解一般过程: (1)首先将各点按照x坐标从小到大排列,时间复杂度为O(nlgn)。 (2)寻找子结构:定义d(i,j)为序号1~max(i,j)已经全部被访问过,并且当前位置在i和j。(规定i>=j,等于当且仅当在最左和最右时取到)同时,定义dis(i,j)为点

yiqzq的博客 432
上一篇: 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、付费专栏及课程。

余额充值