18.03.26 vijos1069新年趣事之红包

2023-11-05 23:59

本文主要是介绍18.03.26 vijos1069新年趣事之红包,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

描述

xiaomengxian一进门,发现外公、外婆、叔叔、阿姨……都坐在客厅里等着他呢。经过仔细观察,xiaomengxian发现他们所有人正好组成了一个凸多边形。最重要的是,他们每个人手里都拿着一个红包(^o^)。于是非常心急,xiaomengxian决定找一条最短的路线,拿到所有的红包。

假设屋里共有N个人拿着红包,把他们分别从1到N编号。其中,编号为1的人就坐在大门口,xiaomengxian必须从这里出发去拿其它的红包。一条合法的路线必须经过所有的点一次且仅一次。

格式

输入格式

第一行为一个整数N(1<=N<=800)。

以下N行,每行两个实数Xi,Yi,表示该点的坐标。

各个点按照逆时针顺序依次给出。

输出格式

一个实数,表示最短的路线长度(保留三位小数)。

样例1

样例输入1

4
50.0 1.0
5.0 1.0
0.0 0.0
45.0 0.0

样例输出1

50.211

限制

各个测试点1s

来源

Xiaomengxian

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 #include <stdlib.h>
 5 #include <math.h>
 6 
 7 using namespace std;
 8 
 9 const int maxn=1000;
10 int n;
11 double dis[maxn][maxn];
12 
13 struct node{
14     double x,y;
15 }p[maxn];
16 
17 double f[maxn][maxn][2];//编号;经过几个点;分两个数组分别存放由第一个点到第二个点(遍历之间的所有点)的最短路径和第二个点到第一个点的最短路径
18 
19 void init(){
20     scanf("%d",&n);
21     for(int i=0;i<=n-1;i++)
22         scanf("%lf%lf",&p[i].x,&p[i].y);
23 }
24 double distan(node a,node b){
25     return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
26 }
27 
28 int main()
29 {
30     double ans=99999999;
31     init();
32     for(int i=0;i<=n-1;i++)
33         for(int j=0;j<=n-1;j++){
34         dis[i][j]=distan(p[i],p[j]);
35     }
36     for(int i=2;i<=n;i++)
37         for(int j=0;j<=n-1;j++){
38             f[j][i][1]=min(f[j][i-1][0]+dis[j][(j+i-1)%n],f[j][i-1][1]+dis[(j+i-1)%n][j]);
39             f[j][i][0]=min(f[(j+1)%n][i-1][0]+dis[j][(j+1)%n],f[(j+1)%n][i-1][1]+dis[j][(j+i-1)%n]);
40         }
41     for(int i=0;i<=n-1;i++)
42         ans=min(f[i][n][0],ans);
43     printf("%.3lf\n",ans);
44     return 0;
45 }
View Code

前提:最短Hamilton链中不存在相交的边。

首先要明确一下模糊的题意:其实就是哈密顿回路少掉一条边,所有的点都可能是出发点,而不是数据里的第一个点出发

设f(s,l,0)为从s遍历l个点(s....s+l-1)的最短距离,f(s,l,1)为从s+l-1遍历l个点(s+l-1...s)的最短距离

其实就是把从s遍历l个点分为两步:

1.从s出发,由于轨迹不能有相交,所以下一步只能是去左边或右边两个相邻点s1和s2(详细证明见附录)

2.从s1到s2遍历/s2到s1遍历(不是开头结尾就是s1 s2的意思,而是把这些所有的点都遍历到)

附录:

下面是算法艺术与信息学竞赛p133-134页和本题几乎一样的例题和解释,比较清楚,贴上来

转载于:https://www.cnblogs.com/yalphait/p/8652893.html

这篇关于18.03.26 vijos1069新年趣事之红包的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/353275

相关文章

每日一题~cf 970 div3 (A思维,B小模拟,C二分,D排列数建图成环,E 26个字母暴力+前缀和,F 逆元,G 数论gcd )

A 题意: 有 a 个1 ,b 个2.问是否能将这些数划分为两个数值相等的集合。 输出 YES 或者 NO —————— 问题等价于 将数组 分成两个数值相同的数组。所以sum 应该是偶数。也就是说 1 的个数是偶数。在i1的个数是偶数的情况下,将 2 分成两份,如果2 的个数是偶数,OK。如果是奇数那么需要1来补齐,如果1 的个数大于等于2那么可以补齐。(1 的个数是偶数,需要2个1来补齐,剩下

26 页高清大数据开发代码速查表,提升效率必备!【可下载】

各大互联网公司高价抢夺数据人才,为谋求长期发展、获得高薪,很多人转行到了大数据领域。这条路人才虽缺,但要成为优秀大数据工程师并不轻松:别的不说,光学习新技术,巩固旧知识,就需要耗费大量时间精力,实属不易。 为帮助大家提高学习效率,方便日后查找和使用,这里整理了一份大数据开发代码速查表资料,内容包括 Spark、Hadoop 及 Hive 等大数据开发主要知识点。 由于篇幅原因,下面只展示了速查表

26 页高清分布式集群代码速查表,提升效率必备!【可下载】

各大互联网公司高价抢夺海量数据处理、分布式系统开发人才,为谋求长期发展、获得高薪,很多人转行到了大数据、分布式、集群运维领域。这条路人才虽缺,但并不轻松:别的不说,光学习新技术,巩固旧知识,就需要耗费大量时间精力,实属不易。 为帮助大家提高学习和工作效率,方便日后查找和使用其中涉及的知识点,这里整理了一份分布式/集群开发、运维的代码速查表资料,内容包括 Spark、Hadoop 及 Hive 等

AI艺术创作福利:免费领取红包封面,Meo喵、龙小金与你共庆佳节!

🎉🐉🐱 亲爱的朋友们,佳节将至,北京时间24年9月6日18:00,我们通过Midjourney的AI艺术创作和ComfyUI设计,特别为大家准备了一份特别的礼物——1588个独家设计的微信红包封面!欢迎关注我们网站的动态,福利不定时发放,🧧🎁红包封面如下: 🌟红包封面特色 我们的红包封面设计融合了现代科技与传统文化,龙小金与Meo喵的形象通过Midjourney的AI艺术创作和

(176)时序收敛--->(26)时序收敛二六

1 目录 (a)FPGA简介 (b)Verilog简介 (c)时钟简介 (d)时序收敛二六 (e)结束 1 FPGA简介 (a)FPGA(Field Programmable Gate Array)是在PAL (可编程阵列逻辑)、GAL(通用阵列逻辑)等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了

『功能项目』DOTween动态文字【26】

打开上一篇25协程生成怪物模型的项目, 本章要做的事情是用DOTween插件做一个动态文字效果 首先在资源商店中免费下载一个DOTween插件 新建脚本:DowteenFlicker.cs 编写脚本: using DG.Tweening;using UnityEngine;using UnityEngine.UI;public class DowteenFli

振动分析-26-频域分析之深入理解功率谱和功率谱密度的计算过程

1 什么是PSD(功率谱密度) 功率谱密度(Power Spectral Density),以及其与Autopower(自功率谱)的区别。 1.1 PSD的定义 PSD——Power Spectral Density是表征信号的功率能量与频率的关系的物理量。 PSD经常用来研究随机振动信号。 PSD通常根据频率分辨率做归一化。 对于振动数据,PSD的单位通常是g^2/Hz。这个单位看起来不

拼手气红包如何设计?

微信是我们日常生活中必不可少的聊天工具,里面的红包功能我们也经常使用,其中,拼手气红包有时候可以抢到很大,有时候就只有0.01,那这个功能应该是如何实现的呢? 红包的分配需要遵循几个规则: 所有人抢到的红包金额之和要等于总金额,不能多也不能少最低红包金额是一分钱保证所有人抢到的红包金额随机 一. 随机算法 先将总金额减去每个红包的最低金额一分钱,在0~剩余金额中取随机数,加上一分钱就是第一

一副很好看很好看的新年手抄报

一副很好看很好看的新年手抄报 来自http://www.asscb.com/news/cjscb/20140103/1263.html

双十一红包

天猫双十一红包 http://s.click.taobao.com/JVTnXQx 红包名称: 双11红包 红包面额: 双11红包:1元、2元、5元、1111元;双11购物券:10元 领用起止时间: 2016年10月21日00:00:00 至 2016年11月10日23:00:00 红包使用时间: 2016年11月11日00:00:00 至 2016年1