蓝桥杯真题:C村建k个邮局

邮局 解题报告 历届试题 邮局   时间限制:1.0s   内存限制:256.0MB     问题描述 C村住着n户村民,由于交通闭塞,C村的村民只能通过信件与外界交流。为了方便村民们发信,C村打算在C村建设k个邮局,这样每户村民可以去离自己家最近的邮局发信。   现在给出了m个备选的邮局,请从中选出k个来,使得村民到自己家最近的邮局的距离和最小。其中两点之间的距离定义为两点之间的直线距离。 阅读详情
标题:邮局
C村住着n户村民,由于交通闭塞,C村的村民只能通过信件与外界交流。为了方便村民们发信,C村打算在C村建设k个邮局,这样每户村民可以去离自己家最近的邮局发信。
现在给出了m个备选的邮局,请从中选出k个来,使得村民到自己家最近的邮局的距离和最小。其中两点之间的距离定义为两点之间的直线距离。

【输入格式】
输入的第一行包含三个整数n, m, k,分别表示村民的户数、备选的邮局数和要建的邮局数。
接下来n行,每行两个整数x, y,依次表示每户村民家的坐标。
接下来m行,每行包含两个整数x, y,依次表示每个备选邮局的坐标。
在输入中,村民和村民、村民和邮局、邮局和邮局的坐标可能相同,但你应把它们看成不同的村民或邮局。

【输出格式】
输出一行,包含k个整数,从小到大依次表示你选择的备选邮局编号。(备选邮局按输入顺序由1到m编号)

【样例输入】
5 4 2
0 0
2 0
3 1
3 3
1 1
0 1
1 0
2 1
3 2

【样例输出】
2 4

【数据规模和约定】
对于30%的数据,1<=n<=10,1<=m<=10,1<=k<=5;
对于60%的数据,1<=m<=20;
对于100%的数据,1<=n<=50,1<=m<=25,1<=k<=10。

【资源约定】
 峰值内存消耗 < 64M

CPU消耗  < 3000ms

-------------------------------------------

思路:用死办法,遍历每种结果取最小值。


import java.util.Scanner;
import java.util.ArrayList;
import java.util.Arrays;
import static java.lang.Math.*;
public class BlueBridgeExcercise5{
    private static int[] combiArr; //临时数组
    private static double[][] distance; //所有距离数据
    private static ArrayList<int[]> combiList = new ArrayList<int[]>();
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(); //村民的户数
        int m = sc.nextInt(); //备选邮局数
        int k = sc.nextInt(); //要建邮局数
        int[] nArrX = new int[n]; //村民家坐标
        int[] nArrY = new int[n]; 
        int[] mArrX = new int[m]; //备选邮局坐标
        int[] mArrY = new int[m];
        for(int i = 0; i < n; i++){ //输入坐标
            nArrX[i] = sc.nextInt();
            nArrY[i] = sc.nextInt();
        }
        for(int i = 0; i < m; i++){
            mArrX[i] = sc.nextInt();
            mArrY[i] = sc.nextInt();
        }
        distance = new double[n][m]; //村民家与备选邮局间的距离
        for(int i = 0; i < n; i++){
            for(int j = 0; j < m; j++){
                distance[i][j] = sqrt(pow(nArrX[i]-mArrX[j], 2) + pow(nArrY[i]-mArrY[j], 2));
            }
        }
        combiArr = new int[k];
        combination(m-1, k, 0);
        int[] best = findLeast(n);
        for(int i = best.length-1; i >= 0; i--){
            System.out.print((best[i]+1) + " ");//运算时编号为0~m-1,加上为题设
        }
    }

    //找出所有组合
    private static void combination(int mMax, int k, int kMax){ 
        if(k==1){
            for(int i = mMax; i >= 0; i--){
                combiArr[kMax] = i;
                int[] temp = Arrays.copyOf(combiArr, combiArr.length);//不能直接add原数组
                combiList.add(temp);
            }
        }
        else{
            for(int i = mMax; i >= k-1; i--){
                combiArr[kMax] = i;
                combination(i-1, k-1, kMax+1);
            }
        }
    }

    //找出最短路径的组合
    private static int[] findLeast(int n){
        double sumLength = 0;
        int[] best = combiList.get(0);
        int[] temp;
        double[] tempEvery = new double[best.length];
        for(int i = 0; i < n; i++){
            for(int k = 0; k < best.length; k++){
                tempEvery[k] = distance[i][best[k]];
            }
            Arrays.sort(tempEvery);
            sumLength += tempEvery[0];//加上到备选邮局的最小距离
        }
        double shortest = sumLength;
        for(int j = 1; j < combiList.size(); j++){
            temp = combiList.get(j);
            sumLength = 0;
            for(int i = 0; i < n; i++){
                for(int k = 0; k < temp.length; k++){
                    tempEvery[k] = distance[i][temp[k]];
                }
                Arrays.sort(tempEvery);
                sumLength += tempEvery[0];
            }
            if(sumLength < shortest){
                shortest = sumLength;
                best = temp;
            }
        }
        return best;
    }
}




  
邮局选址问题 给定n 个居民点的位置,编程计算n 个居民点到邮局的距离总和的最小值。 Description 问题描述: 在一个按照东西和南北方向划分成规整街区的城市里,n个居民点散乱地分布在不同的街区中。用x 坐标表示东西向,用y坐标表示南北向。各居民点的位置可以由坐标(x,y)表示。街区中任意2 点(x1,y1)和(x2,y2)之间的距离可以用数值|x1-x2|+|y1-y2|度量。居民们希望在城市中选择建立邮局的最佳位置,使n个居民点到邮局的距离总和最小。 编程任务: 给定n 个居民点的位置,编程计算n 个居民点到邮局的距离总和的最小值。 Input 输入由多组测试数据组成。 每组测试数据输入的第1 行是居民点数n,1≤n≤10000。接下来n 行是居民点的位置,每行2 个整数x 和y,-10000≤x,y≤10000。 Output 对应每组输入,输出的第1 行中的数是n 个居民点到邮局的距离总和的最小值。 Sample Input 5 1 2 2 2 1 3 3 -2 3 3 Sample Output 10 立即下载

相关推荐

D触发器(D Flip-Flop)与D锁存器(D Latch)

在解释这个练习题之前,我们先来简单回顾一下D触发器(D flip-flop)和D锁存器(D latch)的概念,以及它们在数字电路中的作用。这将帮助我们理解所提到的练习。

weixin_65190179的博客 9168

【蓝桥杯】历届试题 邮局(深度优先搜索dfs、组合方案)

历届试题 邮局 问题描述 C村住着n户村民,由于交通闭塞,C村的村民只能通过信件与外界交流。为了方便村民们发信,C村打算在C村建设k个邮局,这样每户村民可以去离自己家最近的邮局发信。 现在给出了m个备选的邮局,请从中选出k个来,使得村民到自己家最近的邮局的距离和最小。其中两点之间的距离定义为两点之间的直线距离。 输入格式 输入的第一行包含三个整数n, m, k,分别表示村民的户数、备选的邮局数和...

酱懵静的博客 1363

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之EcuM模块配置详解(上)

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之EcuM模块配置详解(上)

weixin_42412049的博客 1015

【回溯】B055_LQ_邮局(暴搜 / dp?)

一、Problem C村住着n户村民,由于交通闭塞,C村的村民只能通过信件与外界交流。为了方便村民们发信,C村打算在C村建设k个邮局,这样每户村民可以去离自己家最近的邮局发信。 现在给出了m个备选的邮局,请从中选出k个来,使得村民到自己家最近的邮局的距离和最小。其中两点之间的距离定义为两点之间的直线距离。 输入格式 输入的第一行包含三个整数n, m, k,分别表示村民的户数、备选的邮局数和要建的邮...

无敌兔0x01 528

Simulink智能驾驶场景探索:自动泊车系统设计与验证

自动泊车系统(APS)传感器模块:用于检测车辆周围的障碍物和其他车辆的位置。路径规划模块:根据传感器数据生成最优的泊车路径。控制器模块:根据路径规划结果生成转向角、速度等控制信号。执行器模块:根据控制器生成的信号调整车辆的方向盘、油门和刹车。在本实例中,我们将使用超声波传感器和摄像头来检测车辆周围的环境,并使用PID控制器实现自动泊车功能。通过本教程,我们介绍了如何使用 Simulink 进行自动泊车系统的仿真。背景介绍:理解自动泊车系统及其在智能驾驶中的应用。所需工具和环境。

MHD0815的博客 506

【ARXML专题】-2-创建一个Classic CAN(经典CAN2.0)/CANFD的系统描述ARXML文件

目录 1 创建一个AUTOSAR系统描述 2 物理层命名以及创建ECU 3 新建一个Frame 4 新建一个PDU 5 新建一个signal 6 结尾 AUTOSAR System Description Network Explorer是一个文件编辑器,支持可视化和编辑系统描述的AUTOSAR系统描述文件和ECU摘录的通信内容,它支持架构版本4.0.3、4.1.2、4.2.1、4.2.2和4.3.0。AUTOSAR系统描述(ARXML)文件是基于XML的文件格式,描述网络通信的元素...

「汽车电子助手」的博客 1万+

蓝桥杯刷题记录--第三周

蓝桥杯刷题第三周

qq_58158487的博客 3805

T型三电平逆变器中点电位平衡详解

T型三电平逆变器(T-type Three-Level Inverter)是一种高效的多电平拓扑,相比传统NPC(Neutral Point Clamped)三电平逆变器,具有更低的开关损耗、更高效率和更简单的结构,尤其适用于中功率应用(如光伏逆变器、风电变换器和工业驱动)。(T-type Three-Level Inverter)中的应用已成为当前中高压功率变换领域(如光伏逆变器、储能PCS、电动汽车充电桩、风电并网和工业驱动)的热门方案。针对 T型逆变器,类似 NPC 的零序注入法适用。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 545

历届试题 邮局

@ 蓝桥杯 练习系统 历届试题 PREV-24 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 C村住着n户村民,由于交通闭塞,C村的村民只能通过信件与外界交流。为了方便村民们发信,C村打算在C村建设k个邮局,这样每户村民可以去离自己家最近的邮局发信。 现在给出了m个备选的邮局,请从中选出k个来,使得村民到自己家最近的邮局的距离和最小。其中两点之间的距离定义为两点之间的直线距离。 输入格式 输入的第一行包含三个整数n, m, k,分别表示村民的户数、备选的邮局数和要建的邮局数。 接

NOW I GOT ONE WAY 233

[企业AI落地] RAG 知识库系统在多租户环境下的细粒度权限隔离设计

多租户 RAG 系统真正的风险不只是搜不到,而是把不该看到的内容查出来、说出来、写回去。本文结合多客户售后知识助手场景,用元数据结构、向量检索过滤、回答策略和审计回写示例拆解租户、资源、检索、生成、审计五层权限边界。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 220

【网络安全】Python代码审计高危函数与安全审计建议

Python 灵活且动态的特性使得开发便捷,但同时也带来了严重安全隐患。如果开发者缺乏安全意识,极易引入命令执行、反序列化漏洞及模板注入漏洞。本文总结了 Python 中常见的高危函数、模块和第三方库,并给出对应的审计建议及其原理解析,供安全研究人员和开发者参考。

等风来 416

蓝桥杯历届试题 邮局(DFS)

问题描述   C村住着n户村民,由于交通闭塞,C村的村民只能通过信件与外界交流。为了方便村民们发信,C村打算在C村建设k个邮局,这样每户村民可以去离自己家最近的邮局发信。   现在给出了m个备选的邮局,请从中选出k个来,使得村民到自己家最近的邮局的距离和最小。其中两点之间的距离定义为两点之间的直线距离。 输入格式   输入的第一行包含三个整数n, m, k,分别表示村民的户数、备选的邮

一个什么都不懂的菜鸟 2282

基于STM32设计的电能质量控制系统_353

本项目基于STM32F103RCT6微控制器设计了一套电能质量控制系统,实现了对火焰、烟雾、环境温湿度、电压、电流及功率等多项参数的实时监测与报警。系统通过MQ2烟雾传感器、火焰传感器、SHT30温湿度传感器及电力参数采集模块采集数据,采用高电平触发有源蜂鸣器进行异常报警。采集的数据通过ESP8266无线模块以AP+TCP模式上传至基于Qt开发的手机APP和电脑上位机,实现远程实时监控和历史数据管理。系统配备1.44寸LCD显示屏,实现本地数据显示。软件采用Keil5开发,采用寄存器编程方式,提高系统响应速

253

邮局 100分代码(dfs+多重剪枝)

蓝桥杯真题-邮局 #include<iostream> #include<algorithm> #include<set> #include<string> #include<cstring> #include<vector> #include<cmath> using namespace std; const ...

weixin_34384681的博客 128

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

visio安装包

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

蓝桥杯练习系统:历届试题 邮局 (详细解释)

时间限制:1.0s 内存限制:256.0MB 问题描述   C村住着n户村民,由于交通闭塞,C村的村民只能通过信件与外界交流。为了方便村民们发信,C村打算在C村建设k个邮局,这样每户村民可以去离自己家最近的邮局发信。   现在给出了m个备选的邮局,请从中选出k个来,使得村民到自己家最近的邮局的距离和最小。其中两点之间的距离定义为两点之间的直线距离。 输入格式   输入的第一行...

qq_40871196的博客 1165

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

蓝桥杯试题 历届试题 邮局

邮局 题中的数据量很小,但单纯的回溯会超时,所以需要剪枝,这里减了三个枝。 1.当即使所有剩余点都算上都不能取k个点时。 2.当当前点大于k个时。 3.当发现加入一个点后距离数组没有变化时,说明这个点可有可无以后不再计算。 #include<iostream> #include<vector> #include<math.h> #include<algorithm> using namespace std; const int MAXN = 100, INF

shi_zi_183的博客 244

2016蓝桥杯假期任务之《邮局》

问题描述   C村住着n户村民,由于交通闭塞,C村的村民只能通过信件与外界交流。为了方便村民们发信,C村打算在C村建设k个邮局,这样每户村民可以去离自己家最近的邮局发信。   现在给出了m个备选的邮局,请从中选出k个来,使得村民到自己家最近的邮局的距离和最小。其中两点之间的距离定义为两点之间的直线距离。 输入格式   输入的第一行包含三个整数n, m, k,分别表示村民的户

想去海邊 1965

蓝桥杯 邮局

历届试题 邮局  时间限制:1.0s   内存限制:256.0MB     锦囊1锦囊2锦囊3问题描述  C村住着n户村民,由于交通闭塞,C村的村民只能通过信件与外界交流。为了方便村民们发信,C村打算在C村建设k个邮局,这样每户村民可以去离自己家最近的邮局发信。   现在给出了m个备选的邮局,请从中选出k个来,使得村民到自己家最近的邮局的距离和最小。其中两点之间的距离定义为两点之间的直线距离...

Wolf_South的博客 1042

吐槽一下 蓝桥杯 历年试题 邮局

因为这题题目质量确实差,所以题目和链接我都懒得贴出来了,只是给有需要搜到的同学说一声不用太纠结这题了 正解的话看这里,https://blog.youkuaiyun.com/yinghui_yht/article/details/79721425?utm_source=blogxgwz1 但是的话这种“正解”用了一个很重要的剪枝, 还有一个很重要的剪枝就是如果一个邮局没起到分担缩小距离的作用,便可以将他标记...

LeeCarry的博客 1560

蓝桥杯--- 历届试题 邮局 (深搜+暴力)(动态待解决)

问题描述   C村住着n户村民,由于交通闭塞,C村的村民只能通过信件与外界交流。为了方便村民们发信,C村打算在C村建设k个邮局,这样每户村民可以去离自己家最近的邮局发信。   现在给出了m个备选的邮局,请从中选出k个来,使得村民到自己家最近的邮局的距离和最小。其中两点之间的距离定义为两点之间的直线距离。 输入格式   输入的第一行包含三个整数n, m, k,分别表示村民的户数、备选的邮

AI蜗牛之家 3577

蓝桥杯 历届试题 邮局

问题描述   C村住着n户村民,由于交通闭塞,C村的村民只能通过信件与外界交流。为了方便村民们发信,C村打算在C村建设k个邮局,这样每户村民可以去离自己家最近的邮局发信。   现在给出了m个备选的邮局,请从中选出k个来,使得村民到自己家最近的邮局的距离和最小。其中两点之间的距离定义为两点之间的直线距离。 输入格式   输入的第一行包含三个整数n, m, k,分别表示村民的户

王振军 3619

邮局 DFS 最短路思想

问题 1457: [蓝桥杯][历届试题]邮局 时间限制: 1Sec 内存限制: 128MB 提交: 136 解决: 25 题目描述 C村住着n户村民,由于交通闭塞,C村的村民只能通过信件与外界交流。为了方便村民们发信,C村打算在C村建设k个邮局,这样每户村民可以去离自己家最近的邮局发信。 现在给出了m个备选的邮局,请从中选出k个来,使得村民到自己家最近的邮局的距离和最小。其中两点之间的距离定...

lanshan1111的博客 350

动规——邮局问题 nkoj 1181

一些村庄建在一条笔直的高速公路边上,我们用一条坐标轴来描述这条公路,每个村庄的坐标都是整数,没有两个村庄的坐标相同。两个村庄的距离定义为坐标之差的绝对值。我们需要在某些村庄建立邮局。使每个村庄使用与它距离最近的邮局,建立邮局的原则是:所有村庄到各自使用的邮局的距离总和最小。  数据规模:1 Input 2行  第一行:n m {表示有n个村庄,建立m个邮局}  第二行:a1 a2 a

INCINCIBLE的博客 1786
上一篇: 求一亿以内的素数
下一篇: 遍历m个元素取k个的递归解法
KingLearnJava
博客等级 码龄12年 93粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值