ABC374 E 题解

news/2024/10/6 17:21:13/文章来源:https://www.cnblogs.com/dengstar/p/18449210

ABC374 E 题解

E - Sensor Optimization Dilemma 2

题目链接:AT | 洛谷

容易发现答案可以二分。于是我们把问题转化为了判定性问题:给定目标 \(x\),能否在花费不超过预算的情况下,使得每个过程的产量都不低于 \(x\)

进一步,由于各个过程的生产互不相关,所以我们要尽可能让每个过程的费用尽可能小,这样一定是最优的。对于每个过程分别考虑,就是要问:

给定两种机器,第一种机器的产量为 \(a\),价格为 \(p\);第二种机器的产量为 \(b\),价格为 \(q\)。要使总产量达到 \(x\),如何让花费尽可能少?

(其实我从这里开始就想不出来了)

一种显然的暴力是枚举某一种机器的数量——例如第一种,从 \(0\) 枚举到 \(\left\lceil \dfrac{x}{a} \right\rceil\),同时可以 \(O(1)\) 计算出所需的第二种机器的数量。这样算出的答案显然一定正确,但枚举的次数是 \(O(x/a)\),当 \(x\) 很大且 \(a\) 很小时,无法接受。

想到正解或许需要一点灵感。考虑这个事实:如果要生产 \(ab\) 个零件,有两种方案:购买 \(b\) 个第一种机器,花费 \(bp\);或 \(a\) 个第二种机器,花费 \(aq\)。可能还有别的方案,但可以别的证明一定不会更优。(从“性价比”的角度来考虑。)

从这个事实,可以推出:在最优方案中,两种机器的产量不可能同时达到 \(ab\)如果两种机器的产量都达到了 \(ab\),总可以把较贵的 \(ab\) 产量交换给另一种机器,使得费用更低。因此,以下两种情况不可能同时发生:

  1. 第一种机器的数量达到 \(b\)
  2. 第二种机器的数量达到 \(a\)

这实际上就是“两种机器的产量不可能同时达到 \(ab\)”的另一种表述方法。

有了这个结论之后,就可以分别枚举两种机器的数量:第一种机器从 \(0\) 枚举到 \(b - 1\),第二种机器从 \(0\) 枚举到 \(a - 1\)。根据上述结论,这样就可以保证枚举到最优策略。设 \(a\)\(b\) 的值域为 \(V\),我们就在 \(O(\log(XV)NV)\) 的时间内通过了此题。

参考代码:

auto check = [&](const i64 x) -> bool
{i64 tot = 0;for(int i = 0; i < n; i++){i64 a = A[i], b = B[i], p = P[i], q = Q[i], xx = x, add = 0x3f3f3f3f3f3f3f3f;for(int j = 0; j < b; j++){i64 tmp = j * p + ceil(max(0ll, xx - j * a), b) * q;add = min(add, tmp);}for(int j = 0; j < a; j++){i64 tmp = j * q + ceil(max(0ll, xx - j * b), a) * p;add = min(add, tmp);}tot += add;if(tot > lim) return false;}return true;
};int L = 0, R = 1e9, ans = -1;
while(L <= R)
{int mid = (L + R) >> 1;if(check(mid)) L = mid + 1, ans = mid;else R = mid - 1;
}

提交记录

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

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

相关文章

2024-2025 1 20241306第二周作业总结

学期2024-2025-1 学号:20241306 《计算机基础与程序设计》第2周学习总结 作业信息这个作业属于哪个课程 <班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 <作业要求的链接>(如2024-2025-1计算机基础与程序设计第2周作业)这个作业的目标 学…

网红狗头来深圳了,上图上图

在海雅缤纷城,晚上7点开摆摊,9点结束,10月7日结束。昨天带了变焦xf18-120mm镜头。和75mm1.2f

2024-2025-1 20241407《计算机基础与程序设计》第二周学习总结

这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计这个作业要求在哪里 [2024-2025-1计算机基础与程序设计第二周作业](https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP/homework/13266)这个作业的目标 数字化 信息安全 *自学教材:计算机科学概论(第七版)第1章…

F5负载均衡系列教程十一【流量负载不均的潜在原因】

F5作为负载均衡设备,主要目的是将流量相对均衡的分发到每台服务器上(如果服务器性能相同),但是某些情况下也可能会产生负载不均的情况,导致负载不均可能的原因主要如下图所示

Visual Studio 2015 社区版安装

下载安装包 链接:https://pan.baidu.com/s/1ebHUp-rUy75-03o5edxHcg 提取码:hs0l --来自百度网盘超级会员V1的分享1、双击安装包2、如图先选自定义,然后选安装路径(英文路径)3、3-安装选项一个就够了,如图4、安装完成

怎么清除浏览器缓存?浏览器缓存清理的方法步骤是什么?

打开浏览器,点击右上角的三个点,然后选择设置按钮。 点击“隐私设置和安全性”按钮。 点击“清除浏览数据”。 选择时间范围,点击清除数据即可,这样就可以将浏览器中的浏览记录、Cookie、缓存的图片和文件清除了。 第一步 打开edge浏览器,点击右上角的三个点,选择设置。第…

[网络爬虫] Jsoup : HTML 解析工具

1 概述 简介Jsoup是一款基于Java的HTML解析器,它提供了一种简单、灵活且易于使用的API,用于从URL、文件或字符串中解析HTML文档。它可以帮助开发人员从HTML文档中提取数据、操作DOM元素、处理表单提交等。主要特点Jsoup的主要特点包括:简单易用:Jsoup提供了一系列简单的API…

F5负载均衡系列教程八【负载均衡算法详解】

#参考文档:3https://clouddocs.f5.com/training/community/f5cert/html/class1/modules/module1.html #系统上可以配置的负载均衡算法如下所示F5默认的负载均衡算法是轮询(Round Robin)负载均衡算法描述使用场景轮询(Round Robin)这是默认的负载均衡方法。轮询方法将每个新…

搜索算法合集 - By DijkstraPhoenix

搜索算法合集 By DijkstraPhoenix 深度优先搜索 (DFS) 引入如果现在有一个迷宫,如何走路径最短?方法 走迷宫最简单粗暴的方法式什么呢?当然是把所有路都走一遍啦! 如果是手动计算的话,可能会把你手指累得抽筋,但电脑不会,电脑具有强大的算力,这种暴力的事情当然是交给电…

个人知识面/技能池

虽然走得慢,但是一直在前行 知识面/技能池 电路 模拟电路微弱信号处理信号链设计1Msps采样电路设计滤波器设计无源滤波器有源滤波器光电探测电路设计电力电子逆变电路设计磁耦合谐振式无线电能传输开关电源LED恒流驱动AC/DC 设计基本电路知识电路基础知识复习跟习题册联系现代…

【CodeForces训练记录】Codeforces Round 977 (Div. 2, based on COMPFEST 16 - Final Round)

赛后反思 做红温了,太菜了,每题都需要WA几次才能过,B题看到 MEX 选择性害怕,时间复杂度又算错了 A题 每次选择一对 \(a_i,a_j\) 把均值插入数组最后面,要想结果最大,对于两个数求均值,最后的结果一定是小于等于其中的较大值,我们可以考虑如何最大化最后一次操作,想到将…

傻逼模拟赛搬的时候能不能看看题面改之后还是不是让人能看懂还有不发 checker 是有什么心事吗

如题。 傻逼模拟赛搬的时候能不能看看题面改之后还是不是让人能看懂还有不发 checker 是有什么心事吗还在最后一道题放集训队互测什么意思 什么叫有 \(b_{k}\) 种 \(k\) 类型的货币,同一种流通的货币不会超过二十种 什么叫接下来 \(n\) 个数表示 \(a_{1} \sim a_{n-1}\)upd: