[蓝桥杯 2020 国 C] 补给

news/2024/12/16 11:25:43/文章来源:https://www.cnblogs.com/wzx-RS-STHN/p/18609657

题目

Description

小蓝是一个直升飞机驾驶员,他负责给山区的 nn 个村庄运送物资。

每个月,他都要到每个村庄至少一次,可以多于一次,将村庄需要的物资运送过去。

每个村庄都正好有一个直升机场,每两个村庄之间的路程都正好是村庄之间的直线距离。

由于直升机的油箱大小有限,小蓝单次飞行的距离不能超过 DD。每个直升机场都有加油站,可以给直升机加满油。

每个月,小蓝都是从总部出发,给各个村庄运送完物资后回到总部。如果方便,小蓝中途也可以经过总部来加油。

总部位于编号为 11 的村庄。

请问,要完成一个月的任务,小蓝至少要飞行多长距离?

Input

输入的第一行包含两个整数 nn,DD,分别表示村庄的数量和单次飞行的距离。

接下来 nn 行描述村庄的位置,其中第 ii 行两个整数 xixiyiyi 分别表示编号为 ii 的村庄的坐标。村庄 ii 和村庄 jj 之间的距离为 欧几里得距离。

Output

输出一行,包含一个实数,四舍五入保留正好 22 位小数,表示答案。

Sample Input

4 6
1 1
4 5
8 5
11 1

Sample Output

28.00

思路

这是一道状压$dp$的经典题

但不同的是每个村庄可以经过多次;

我们首先考虑什么情况下需要多次经过;

很明显如果两点距离大于$D$时,无法直接到达,就需要通过其他点去到达目标点,而在这个过程中其他点可能已经被经过了;

对于多次经过的点,记录状态十分困难;

所以,我们可以提前用最短路预处理每个点到其他点的最短距离;

这样记录状态时就可以忽略中间重复经过的点而直接记录包含目标点的状态集合;

那么状态转移方程很显然就是:

$dp[i][k]=min(dp[i][k],dp[j][k \oplus (1<<(i-1))]+a[j][i]);$

$k$ 是枚举的到达过的点的集合,$i$ 和 $j$ 都是枚举当前到达的点;

 


 

代码

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const ll _=21;
ll n;
double m;
double b[_],c[_];
double a[_][_],dp[_][1<<20];
int main()
{memset(dp,127,sizeof(dp));scanf("%lld%lf",&n,&m);for(ll i=1;i<=n;i++)scanf("%lf%lf",&b[i],&c[i]);for(ll i=1;i<=n;i++)for(ll j=1;j<=n;j++){double num=sqrt(pow(b[i]-b[j],2)+pow(c[i]-c[j],2));if(num<=m)a[i][j]=num;elsea[i][j]=INT_MAX;}for(ll k=1;k<=n;k++)for(ll i=1;i<=n;i++)for(ll j=1;j<=n;j++)//最短路预处理if(a[i][j]>a[i][k]+a[k][j])a[i][j]=a[i][k]+a[k][j];dp[1][1]=0;//从第一个村庄出发for(ll k=1;k<=(1<<n)-1;k+=2)//k每次加二保证k集合永远包含第一个村庄for(ll i=1;i<=n;i++)for(ll j=1;j<=n;j++)if(k&(1<<(i-1))&&k&(1<<(j-1))){dp[i][k]=min(dp[i][k],dp[j][k^(1<<(i-1))]+a[j][i]);//转移
    }double ans=INT_MAX;for(ll i=2;i<=n;i++)ans=min(ans,dp[i][(1<<n)-1]+a[i][1]);printf("%.2lf",ans);return 0;
}

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/853689.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

年会筹备大揭秘:看板软件如何助力团队协作?

看板软件以其直观、灵活和高效的特点,成为企业年会准备的得力助手。通过看板软件,企业可以更加高效地组织和管理年会筹备工作,确保活动的顺利进行,并为企业文化的传播和员工凝聚力的提升做出贡献。看板软件以其直观、灵活和高效的特点,成为企业年会准备的得力助手。通过看…

【每日一题】20241216

我做出了选择。也许不是好的选择,但选择了就要承担后果。【每日一题】已知函数 \(f(x)=\sin|x|+2|\sin x|\),则 \(f(x)\) 在 \((-2\pi,\pi)\) 的零点个数为________. 已知函数 \(f(x)(x\in\mathbf{R})\) 满足 \(f(-x)=2-f(x)\).设方程 \(f(x)-\frac{x+1}{x}=0\) 的 \(m\) 个…

ARMS 用户体验监控正式发布原生鸿蒙应用 SDK

原生鸿蒙系统是我国首个实现全栈自研的操作系统,全面突破操作系统核心技术,真正实现了国产操作系统的自主可控。在这样的背景下,RUM 推出的用于监控原生鸿蒙的 SDK 为鸿蒙应用的开发者提供了更进一步的便利,对衡量用户体验关键的指标进行全面的分析和追踪。作者:杨兰馨(楠…

零基础学习人工智能—Python—Pytorch学习(十二)

前言 本文介绍使用神经网络进行实战。 使用的代码是《零基础学习人工智能—Python—Pytorch学习(九)》里的代码。 代码实现 mudule定义 首先我们自定义一个module,创建一个torch_test17_Model.py文件(这个module要单独用个py文件定义),如下: import torch.nn as nn import…

700PB数据的数仓依然“快稳省”!ByteHouse这本白皮书揭秘关键(内附下载链接)

12月10日,《火山引擎ByteHouse云数仓产品白皮书》在线上发布。在数字经济蓬勃发展的今天,企业面临着数据量爆炸性增长、数据分析需求日益复杂的双重挑战。传统的数据仓库解决方案已经难以满足企业对数据处理速度和灵活性的高要求。为了应对这些挑战,火山引擎于2021年正式推出…

子查询关联条件字段没有指定表的别名导致的查询结果不正确的问题

子查询关联查询问题,子查询关联条件字段没有指定表的别名导致的查询结果不正确的问题首先介绍一下表结构和背景;有两个数据库表,供应商XX任务主表和供应商等级变更记录表; 等级表里面有多个任务,两张表是通过同名称的字段,supplier_id关联; ①SQL是XX任务表关联供应商等…

Xinference环境搭建推理测试

引子 写了很多篇开源大模型的环境部署与推理搭建,截止到目前,开源大模型已经发展较为完善。个人觉得,产品和项目维度来看更多的是如果去落地实现,也就是大模型的最后一公里的应用开发。最近看到Xinference一个开源很火的推理框架。OK,那就让我们开始吧。 一、框架介绍 Xin…

前端工程化_CSS 工具链_学习笔记

本文主要介绍了 CSS 工具链,可以看出工具链的出现都是为了解决语言的问题,文中就介绍了预处理器和后处理器,预处理器主要介绍了 sass,并举了星空这个例子,sass 是通过与预编译器编译成 css 后给 html 使用;后处理器则介绍了 postcss,其中 postcss 和 babel 类似,都有很…

车载以太网TSN设计及测试解决方案

智能汽车电子电气架构全面向中央+区域式发展,车载通信新技术是新架构技术栈的重要组成部分。车载以太网时间敏感网络TSN技术凭借其低延时、高可靠的特点获得多家OEM的认可。依赖多年技术研发及数十个项目的实践积累,经纬恒润可为客户提供全面、专业且本土化的TSN设计与测试解…

看板软件:跨境电商圣诞营销加速器

看板软件在跨境电商中发挥着多重作用,特别是在圣诞节这一关键销售时期。通过清晰有序的任务管理、灵活适配的自定义功能、高效的信息整合与数据分析、以及精准有效的营销策略应用,看板软件显著提升了跨境电商团队的协作效率和销售能力。圣诞节作为全球最重要的购物节日之一,…

LameUI:轻量级嵌入式图形用户界面的绝佳选择

在信息技术迅猛发展的今天,嵌入式系统逐渐成为各种智能设备的核心。这些系统往往面临资源有限的挑战,因此在开发用户界面时,使用轻量级、易于实现的库显得尤为重要。在这种背景下,LameUI 应运而生。作为一个轻量级且平台无关的图形用户界面库,LameUI 旨在为开发者提供简便…

分享图片

测试图片分享