UVA1347 Tour

news/2024/10/22 5:17:20/

题目大意:
给你n个坐标
按x递增顺序给出坐标
让一个人按严格x递增顺序走到最后一个点
之后再从最后一个点严格向左走回来
要求走的时候除了起点终点经过两次以外其他点全部都经过一次
问最短路径

思路:dp
这里紫书的第一个图是有问题的
题目要求人向右走的时候x要严格增加,向左走的时候严格变小
不能经过一个超过1个点坐标的时候又反过来走
不然如果可以这题是无解的
思路就是两个人从起点出发走两条没有相同点的路径最终走到终点
设dp[i][j]表示第1个人走到第i点,第二个人走到第j点还需要多少距离到终点
因为dp[j][i]跟dp[i][j]一个意思,第一个人走或者第二个走是没区别的
为了方便设i>j(肯定不能等于,不能走相同的点)
那么为了走过所有的点我们在第1个人走到第i点,第二个人走到第j点的时候后有两种情况
要么第一个人走到i+1的点
要么第二个人走到i+1的点
因为只能递增着走,而且又要经过所有点,所以就这两种情况
又因为i>j,当第二个人走到i+1的点的时候dp[i][j]就变成了dp[i+1][i]
然后因为一开始的时候第一个点肯定要走到第二个点的(无论是谁,总有一个人要走,那就让第一个人走因为i>j)
我们设的状态又是i>j的
所以算答案的时候不能算dp[1][1],要是dp[2][1]+第一个点到第二个点的距离
然后计算每个转移的最小值就好啦

AC代码:

#include <bits/stdc++.h>
#define pf(x) (x)*(x)
using namespace std;
struct node{int x,y;
}a[1010];
int n;
double calc_dist(node x,node y){return sqrt(pf(x.x-y.x)+pf(x.y-y.y));}
double dp[1010][1010];
double dist[1010][1010];
int v[1010][1010];
double solve(int i,int j){if(dp[i][j])return dp[i][j];//记忆化搜素if(i==n-1)return dist[n][j]+dist[i][n];else return dp[i][j]=min(solve(i+1,j)+dist[i][i+1],solve(i+1,i)+dist[i+1][j]);
}
int main()
{while(scanf("%d",&n)!=EOF){memset(dp,0,sizeof(dp));for(int i=1;i<=n;i++){cin>>a[i].x>>a[i].y;}for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){dist[i][j]=dist[j][i]=calc_dist(a[i],a[j]);}}printf("%.2lf\n",dist[1][2]+solve(2,1));}return 0;
}

http://www.ppmy.cn/news/191691.html

相关文章

UVA 1347 Tour

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

1347: 众数

题目描述 由文件给出N个1到30000间无序数正整数&#xff0c;其中1≤N≤10000&#xff0c;同一个正整数可能会出现多次&#xff0c;出现次数最多的整数称为众数。求出它的众数及它出现的次数。 输入 输入第一行是正整数的个数N&#xff0c;第二行开始为N个正整数。 输出 输出有…

UVa1347旅行

题意&#xff1a;n个点&#xff0c;坐标给出&#xff0c;设计一条路线&#xff0c;从最左边的点&#xff0c;走到最右边的点&#xff0c;再回来&#xff0c;除最左边的点和最右边的点外&#xff0c;每个点有且经过一次。求最短距离。 分析&#xff1a; 转换一下思路&#xff0c…

14年macmini装双硬盘_2011中Mac Mini详尽拆解 可装两块硬盘

前言&#xff1a;ifixit这位拆解专业户在苹果发布了2011年中款的MacBook Air和Mac Mini这个时候&#xff0c;自然是不会闲着的。这不分解完了新版的MacBook Air之后&#xff0c;新版的Mac Mini也在ifixit的拆解大师们的手下&#xff0c;被细细分解。 第一步&#xff1a; 我们(i…

uva-1347

题目链接&#xff1a;https://vjudge.net/problem/UVA-1347 题意&#xff1a;有n个点&#xff0c;给出x、y坐标。找出一条路&#xff0c;从最左边的点出发&#xff0c;严格向右走到达最右点再严格向左回到最左点。问最短路径是多少&#xff1f; 不看题解我是真的不知道这个题可…

mini计算机结构,简单拆机看内部构造_苹果 Mac mini MGEN2CH/A_台式电脑评测-中关村在线...

从整个外观设计来看,新Mac mini的变化确实不大,仅仅是在接口配置与布局方面有所不同,而内部变化在先前的拆机中有所展示,当然在此还是有必要重新梳理一边。首先新Mac mini的底盖圆盘的固定方式较之上一代产品有所改变,原先旋钮式固定方式变更为卡扣式固定,因此拆机时需要…

Mac Mini换固态硬盘

新年新气象&#xff0c;今天来把mini升级下&#xff0c;换个固态硬盘。 mini型号&#xff1a; A1347 &#xff0c; 2013版 材料&#xff1a; 固态硬盘一个&#xff0c;螺丝刀一套(里面需包含六角T6、T8和M2的螺丝刀)&#xff0c;U盘一个&#xff0c;拨片一个。如图&#xff1a;…

UVA1347 旅行

UVA1347 旅行 题目大意 给定 n n n 个点 ( x i , y i ) (x_i,y_i) (xi​,yi​)&#xff0c;从最左边的点出发到达最右边&#xff0c;再返回最左边&#xff0c;要求经过的点不重复且覆盖所有的点&#xff0c;求最小路径长&#xff08;两点的距离定义为欧几里得距离&#xff…