2024HBCPC:E Breakfast II

题目描述

作为一个合格的大学生,你不仅需要学习成绩好,还需要会买包子和鸡蛋。 今天,又轮到你们给你的导师买早饭了! 这一次你们一共需要给导师买 n n n 个包子和 m m m 个鸡蛋(请注意,这一次可能不再只买 32 32 32 个包子和 20 20 20 个鸡蛋)。 你的大学可以看作一个二维平面上 1 0 4 × 1 0 4 10^4×10^4 104×104 的正方形,横纵坐标的范围均为 0 ∼ 1 0 4 0∼10^4 0104。学校内一共有 3 3 3 间食堂,分别叫做综合食堂风味餐厅学生食堂。为了防止一个人买太多的早饭,每个人在每间食堂买的包子数和鸡蛋数分别不能超过 b b b e e e。 你们一共有 k k k 个人,第 i i i 个人所在宿舍的坐标为 ( X i , Y i ) (X_i,Y_i) (Xi,Yi)。你们需要选出若干同学,这些同学从各自的宿舍出发,前往食堂购买早饭后,然后将至少 n n n 个包子和 m m m 个鸡蛋送到导师的办公室。请注意,对于每位同学,每个食堂最多只能去购买一次。 你们需要进行商量,并决定哪些同学去买早饭、每个同学去哪些食堂、以及这些同学的路线,使得所有同学路线长度之和最小。如果某位同学无需购买早饭,那么他将待在宿舍里而不用前往办公室。

Input

第一行 3 3 3 个由空格分隔的整数 n , m , k ( 1 ≤ n , m , k ≤ 1 0 3 ) n,m,k (1≤n,m,k≤10^3) n,m,k(1n,m,k103),分别表示需要的包子数、鸡蛋数和学生个数。 第二行 2 2 2 个由空格分隔的整数 b , e ( 1 ≤ b ≤ n , 1 ≤ e ≤ m ) b,e (1≤b≤n,1≤e≤m) b,e(1bn,1em),分别表示每个人在每间食堂可以购买的包子与鸡蛋的上限。 第 3 ∼ 6 3∼6 36 行,每行两个由空格分隔的非负整数 x , y ( 0 ≤ x , y ≤ 104 ) x,y (0≤x,y≤104) x,y(0x,y104),依次表示综合食堂风味餐厅学生食堂办公室的坐标。 接下来 k k k 行,每行两个由空格分隔的非负整数 X i , Y i ( 0 ≤ X i , Y i ≤ 1 0 4 ) X_i,Y_i (0≤X_i,Y_i≤10^4) Xi,Yi(0Xi,Yi104),表示每位同学宿舍的坐标。 保证所有坐标互不相同,输入保证一定存在至少一种合法的买早饭方案

Output

一行一个浮点数,表示最小的路线长度之和。你的答案将被认为是正确的当且仅当与标准答案的相对或绝对误差不超过 1 0 − 6 10^{−6} 106

输入样例1
32 20 2
14 15
2 2
4 8
8 4
6 2
2 8
7 7
输出样例1
16.4759861592
输入样例2
32 20 2
32 20
2 2
4 8
8 4
6 2
2 8
7 7
输出样例2
5.9907047849
提示

对于样例一,最短的路线如图所示(其中 A , B , C A,B,C A,B,C 表示三个食堂, D D D 表示办公室, S 1 , S 2 S1,S2 S1,S2 表示学生的位置):
note.png

解题思路

分析题目可以得知,可以通过所需购买的包子和鸡蛋的个数推算出至少需要去食堂 m x = m a x ( ⌈ n b ⌉ , ⌈ m e ⌉ ) mx=max(\lceil \frac{n}{b} \rceil, \lceil \frac{m}{e} \rceil) mx=max(⌈bn,em⌉)次,每个学生之间也相互独立,所以考虑动态规划 d p [ i ] [ j ] dp[i][j] dp[i][j] 表示 考虑前 i i i 个学生,去了 j j j 次食堂所需的最短距离,问题就转换成了一个很经典的背包模型了。
在这里插入图片描述
其中, s [ i ] s[i] s[i] 维护的是第 i i i 个学生的信息,比如 s [ i ] . a s[i].a s[i].a 是经过综合食堂去办公室的最短距离, s [ i ] . a b s[i].ab s[i].ab 则是经过综合食堂,风味餐厅这两个食堂再去办公室的最短距离。

实现代码
#pragma GCC optimize(3, "Ofast", "inline")
#include<bits/stdc++.h>
#define int long long
#define x first
#define y second
#define debug(x) cerr << #x" = " << x << '\n';
using namespace std;void solve()
{int n, m, k, b, e;cin >> n >> m >> k >> b >> e;vector<pair<int, int>> D(4);for (int i = 0; i < 4; i++) cin >> D[i].x >> D[i].y;struct node{int x, y;double a, b, c, ab, ac, bc, abc;};vector<node> s(k + 10);auto get= [](int x1, int y1, int x2, int y2){double dx = x1 - x2;double dy = y1 - y2;return sqrt(dx * dx + dy * dy);};double at = get(D[0].x, D[0].y, D[3].x, D[3].y);double bt = get(D[1].x, D[1].y, D[3].x, D[3].y);double ct = get(D[2].x, D[2].y, D[3].x, D[3].y);double ab = get(D[0].x, D[0].y, D[1].x, D[1].y);double ac = get(D[0].x, D[0].y, D[2].x, D[2].y);double bc = get(D[1].x, D[1].y, D[2].x, D[2].y);for (int i = 1; i <= k; i++){cin >> s[i].x >> s[i].y;double a = get(s[i].x, s[i].y, D[0].x, D[0].y);double b = get(s[i].x, s[i].y, D[1].x, D[1].y);double c = get(s[i].x, s[i].y, D[2].x, D[2].y);s[i].a = a + at;s[i].b = b + bt;s[i].c = c + ct;s[i].ab = a + ab + bt;s[i].ab = min(s[i].ab, b + ab + at);s[i].ac = a + ac + ct;s[i].ac = min(s[i].ac, c + ac + at);s[i].bc = b + bc + ct;s[i].bc = min(s[i].bc, c + bc + bt);s[i].abc = a + ab + bc + ct;s[i].abc = min(s[i].abc, a + ac + bc + bt);s[i].abc = min(s[i].abc, b + ab + ac + ct);s[i].abc = min(s[i].abc, b + bc + ac + at);s[i].abc = min(s[i].abc, c + ac + ab + bt);s[i].abc = min(s[i].abc, c + bc + ab + at);}int mx = (n + b - 1) / b;mx = max(mx, (m + e - 1) / e);vector<vector<double>> dp(k + 10, vector<double>(mx + 10, 1e18));for (int i = 0; i <= k; i++) dp[i][0] = 0;for (int i = 1; i <= k; i++){for (int j = 0; j <= mx; j++){dp[i][j] = dp[i - 1][j];if (j >= 1) dp[i][j] = min(dp[i][j], dp[i - 1][j - 1] + min(s[i].a, min(s[i].b, s[i].c)));if (j >= 2) dp[i][j] = min(dp[i][j], dp[i - 1][j - 2] + min(s[i].ab, min(s[i].ac, s[i].bc)));if (j >= 3) dp[i][j] = min(dp[i][j], dp[i - 1][j - 3] + s[i].abc);}}cout << fixed << setprecision(10) << dp[k][mx] << '\n';
}signed main()
{// freopen("Sample.in", "r", stdin);ios::sync_with_stdio(false);cin.tie(nullptr);int T = 1;// cin >> T;while (T--) solve();return 0;
}

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

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

相关文章

搭贝财务管理助您轻松掌控财务大局

在当今竞争激烈的商业环境中&#xff0c;有效的财务管理是企业成功的关键之一。搭贝财务管理平台为您提供了一揽子解决方案&#xff0c;助您轻松掌握财务大局&#xff0c;实现财务管控的全面数字化。 &#x1f4c8; 基础信息管理 搭贝财务管理平台首先提供了完善的基础信息管理…

3D开发工具HOOPS在BIM系统中的应用

建筑信息模型是一种革命性的建筑设计、施工和管理方法。它通过创建和利用数字信息来优化建筑项目的设计、施工和运营过程。在这个过程中&#xff0c;3D开发工具HOOPS扮演着至关重要的角色&#xff0c;为BIM系统提供了强大的技术支持和丰富的功能。HOOPS中文网http://techsoft3d…

RAG架构的数据准备流程

虽然现成的大型语言模型 (LLM) 功能强大&#xff0c;但企业发现&#xff0c;根据其专有数据定制 LLM 可以释放更大的潜力。检索增强生成 (RAG) 已成为这种定制的主要方法之一。RAG 模型将大型语言模型强大的语言理解能力与检索组件相结合&#xff0c;使其能够从外部数据源收集相…

5V升压充电8.4V芯片4A输出电流-AH3330

AH3330-5V升压充电8.4V芯片&#xff0c;采用SSOP-10封装&#xff0c;配备外挂的MOS管&#xff0c;可支持4.5V到32V的输入电压范围&#xff0c;输出功率高达40W。该芯片广泛应用于多节电池充电控制领域&#xff0c;尤其适用于锂电池、磷酸铁锂电池和铅酸电池等不同类型的充电控制…

什么是erp仓储管理系统?ERP系统的价值体现在哪些方面?

ERP仓储管理系统是一个帮助企业管理仓库的工具。想象一下&#xff0c;如果你是一个仓库管理员&#xff0c;里面堆满了各种各样的产品和货物&#xff0c;如何确保这些产品数量准确、摆放有序&#xff0c;以及快速找到自己需要的产品呢&#xff1f; 这时&#xff0c;如果企业引用…

【MySQL数据库】 MySQL主从复制

MySQL主从复制 MySQL主从复制主从复制与读写分离的意义主从数据库实现同步&#xff08;主从复制&#xff09;三台mysql服务器搭建主从复制&#xff0c;要求不可以用root帐号同步&#xff0c;要求第三台服务器在测试过1、2的主从复制之后进行主从复制配置 MySQL主从复制 主从复…

conda 环境找不到 libnsl.so.1

安装prokka后运行报错 perl: error while loading shared libraries: libnsl.so.1: cannot open shared object file: No such file or directory 通过conda list 可以看到 有libsnl 2.00版本&#xff0c;通过修改软链接方式进行欺骗

代码随想录算法训练营Day2|977.有序数组的平方、59.螺旋矩阵||、 209.长度最小的子数组

977.有序数组的平方 这道题给出的原数组有两个特点&#xff1a; 1、由小到大 2、有负数有正数 因此&#xff0c;这个数组平方后的数应该是从两头向中间的0减小的&#xff0c;但是两头的大小需要我们用两个指针便历之后去判断大小。在遍历的同时left指针向右走&#xff0c;righ…

详谈 Java中的list.forEach()和list.stream().forEach() 异同点

涉及的文章链接&#xff1a;ArrayList 循环Remove遇到的坑 一、想总结本篇博客的原因 在日常开发中&#xff0c;需要对集合数据进行或多或少的赋值修改&#xff0c;那么循环赋值或者做一些处理就是最常见的一种操作了&#xff0c;但是用习惯了stream流&#xff0c;所以在循环的…

USST新生训练赛div2+div3题解

目录 前言题解部分B Ichihime and Triangle(800)题目大意题解代码实现 C Kana and Dragon Quest game(900)题目大意题解代码实现 J Squares and Cubes(800)题目大意题解代码实现 F Double Sort(1200)题目大意题解代码实现 I Minimize the Thickness(1100)题目大意题解代码实现 …

分布式事务解决方案(最终一致性【可靠消息解决方案】)

可靠消息最终一致性解决方案 可靠消息最终一致性分布式事务解决方案指的是事务的发起方执行完本地事务之后&#xff0c;发出一条消息&#xff0c;事务的参与方&#xff0c;也就是消息的消费者一定能够接收到这条消息并且处理完成&#xff0c;这个方案强调的是只要事务发起方将消…

自适应感兴趣区域的级联多尺度残差注意力CNN用于自动脑肿瘤分割| 文献速递-深度学习肿瘤自动分割

Title 题目 Cascade multiscale residual attention CNNs with adaptive ROI for automatic brain tumor segmentation 自适应感兴趣区域的级联多尺度残差注意力CNN用于自动脑肿瘤分割 01 文献速递介绍 脑肿瘤是大脑细胞异常和不受控制的增长&#xff0c;被认为是神经系统…

监控员工电脑的软件有哪些,不得不说这几款电脑监控软件太好用了

监控员工电脑的软件在市场上种类繁多&#xff0c;以下是几款备受好评的电脑监控软件&#xff0c;它们各自具有独特的功能和优势&#xff0c;选择前必须了解一下才能做成正确决定。 1.安企神&#xff1a; 这款软件支持7天试用测试&#xff0c;获取测试版请移驾 ↓↓↓ 安企神…

Transformer模型的简单学习

前言 Transformer 来源于一篇论文&#xff1a;Attention is all you need TRM在做一件什么事情呢&#xff1f;其实一开始它是被用于机器翻译的&#xff1a; 更详细的&#xff1a; 更详细的&#xff1a; 从上图可以看出&#xff0c;一个Encoders 下面包含了 n 个 Encoder&…

如何将 Langfuse 链接到自有 PostgreSQL 数据库并升级 PostgreSQL 版本

在本文中,我们将介绍如何将 Langfuse 应用程序链接到自有的 PostgreSQL 数据库,并升级 PostgreSQL 以支持 jsonb 类型。 前提条件 运行 CentOS 7 的服务器已安装的 PostgreSQL 9.2 或更低版本需要将 Langfuse 连接到自有数据库,并升级 PostgreSQL 以支持 jsonb 类型1. 将 La…

五款局域网监控软件良心推荐

五款局域网监控软件良心推荐 有人问我&#xff0c;能不能推荐几款好用的局域网监控软件。 我说&#xff0c;当然可以了&#xff0c;凭良心说&#xff0c;这几款软件在实用性、用户体验、隐私保护以及性价比上&#xff0c;绝对是当前最强监控软件。 1. 安企神 这款软件支持7天…

vue3(一):Vue3简介、创建vue3工程、Vue3中的响应式

目录 一.Vue3简介 1.性能提升 2.源码升级 3.拥抱ts 4.新特性 &#xff08;1&#xff09;Composition API&#xff08;组合API&#xff09;&#xff1a; &#xff08;2&#xff09;新的内置组件&#xff1a; &#xff08;3&#xff09;其他改变&#xff1a; 二.创建vue…

Postman实现批量发送json请求

最近有一个场景&#xff0c;需要本地批量调用某个接口&#xff0c;从文件中读取每次请求的请求体&#xff0c;实现方法记录一下。 1.读取请求体 在 Postman 中&#xff0c;如果你想在 Pre-request Script 阶段读取文件内容&#xff0c;比如为了将文件内容作为请求的一部分发送…

聊天宝使用技巧揭秘让您快捷回复效率翻倍

聊天宝快捷回复软件&#xff0c;推出大量实用工具&#xff0c;帮助客服能更加高效的实现快捷发送&#xff0c;一键发送&#xff0c;效果翻倍&#xff01; ​ 前言 聊天宝作为一款快捷回复工具&#xff0c;让客服免去了打字回复之苦。所以很受广大客服欢迎&#xff0c;真是一旦…

什么是“SQL注入攻击”?如何预防和应对?

一、SQL注入攻击的概念 SQL注入攻击是一种针对数据库驱动的应用程序的攻击技术&#xff0c;其中攻击者通过在应用程序的输入字段中插入或“注入”恶意的SQL代码&#xff0c;试图非法访问、操作或破坏后端数据库。当应用程序不正确地处理用户输入&#xff0c;并将其直接拼接到SQ…