【每日一题】最大合金数

文章目录

  • Tag
  • 题目来源
  • 解题思路
    • 方法一:二分枚举答案
  • 写在最后

Tag

【二分枚举答案】【数组】【2024-01-27】


题目来源

2861. 最大合金数


解题思路

方法一:二分枚举答案

思路

如果我们可以制造 x 块合金,那么一定也可以制造 x-1 块合金。于是我们可以枚举可以制造的合金数量:

  • 设 mid 为当前二分的答案;
  • 如果可以在预算范围内可以制造 mid 块合金,那么更新二分范围的左边界,表示可以制造的合金可以再多一些;
  • 如果不能在预算范围内制造 mid 块合金,那么更新二分范围的右边界。

那么当我们二分到 mid 时,如何判断是否可以制造 mid 块合金呢?

题目中有一条重要信息「所有合金都需要由同一台机器制造」,换言之如果使用某一台机器加工合金,那么其他所有合金都要由这台机器加工,中途不同换别的机器。于是我们可以枚举使用哪一台机器。对于使用第 i 台机器加工第 j 种合金,需要的金属为 c o m p o s i t i o n [ i ] [ j ] × m i d composition[i][j] \times mid composition[i][j]×mid,当前已经拥有的金属数量为 s t o c k [ j ] stock[j] stock[j],因此还需要的预算为:

s p e n d = m a x c o m p o s i t i o n [ i ] [ j ] × m i d , 0 × c o s t [ j ] spend = max{composition[i][j] \times mid, 0} \times cost[j] spend=maxcomposition[i][j]×mid,0×cost[j]

如果 spend <= budget 则可以在预算范围内可以制造 mid 块合金,否则不可以。

二分查找的上下限如何确定?

二分查找的下界可以设置为 0 或者 1,这取决于二分区间的开闭形式,这里二分的下界我设定为 0,表示可以加工的合金数最大值可以为 0。当然可以设置下界为 1,但是这时候的需要维护一个额外的变量 res 记录答案并且初始化 res = 0

可以假设 composition[i][j] 和 cost[j] 都是 1,这样就可以计算出二分查找的上界为 min(stock) + budget

关于二分查找的开闭形式,这篇文章 讲的比较清楚,可以参考。

算法

class Solution {
public:int maxNumberOfAlloys(int n, int k, int budget, vector<vector<int>>& composition, vector<int>& stock, vector<int>& cost) {int left = 0, right = ranges::min(stock) + budget;while (left <= right) {     // 二分的闭区间写法int mid = left + ((right - left) >> 1);bool isValid = false;for (int i = 0; i < k; ++i) {long long spend = 0;for (int j = 0; j < n; ++j) {spend += max(static_cast<long long>(composition[i][j]) * mid - stock[j], 0LL) * cost[j];}if (spend <= budget) {isValid = true;break;}}if (isValid) {left = mid + 1;}else {right = mid - 1;}}return left-1;}
};

复杂度分析

时间复杂度: O ( k n l o g U ) O(knlogU) O(knlogU) U = m i n ( s t o c k ) + b u d g e t U = min(stock) + budget U=min(stock)+budget

空间复杂度: O ( 1 ) O(1) O(1)


写在最后

如果您发现文章有任何错误或者对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度的方法,欢迎评论区交流。

最后,感谢您的阅读,如果有所收获的话可以给我点一个 👍 哦。

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

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

相关文章

log4cplus开源库使用

log4cplus 的github地址&#xff1a;https://github.com/log4cplus/log4cplus 下载链接&#xff1a;log4cplus - Browse /log4cplus-stable/2.0.7 at SourceForge.net 官方文档&#xff1a;log4cplus / Wiki / Home 1.log4cplus配置 &#xff08;1&#xff09;打开解决方案…

利用柯西积分公式证明最大模定理

一、利用柯西积分公式证明最大模定理 一、利用柯西积分公式证明最大模定理 设复变函数f(z)在封闭区域上的解析&#xff0c;则该复变函数的模|f(z)|的最大值只能出现在该区域的边界上&#xff0c;除非是个常数

字符串相关函数【超详细】(strcpy,strstr等string.h中的函数)

文章目录 strlen库中函数定义函数作用函数大概“工作”流程函数使用注意&#xff08;要求&#xff09;函数使用例举 strcpy库中函数定义函数作用函数使用注意&#xff08;要求&#xff09;函数大概“工作”流程函数使用例举 strcat库中函数定义函数作用函数使用注意&#xff08…

EventSource 长链接执行

EventSource 说明文档MDN 其他参考文档 一、利用node启服务 import fs from fs import express from express const app express() // eventSource 仅支持 get 方法 // 服务器端发送的数据必须是纯文本格式&#xff0c;不能是二进制数据。 app.get(/api, (req, res) > …

预训练语言模型transformer

预训练语言模型的学习方法有三类&#xff1a;自编码&#xff08;auto-encode, AE)、自回归&#xff08;auto regressive, AR&#xff09;&#xff0c;Encoder-Decoder结构。 决定PTM模型表现的真正原因主要有以下几点&#xff1a; 更高质量、更多数量的预训练数据增加模型容量…

第20届纪念款-牛客周赛 Round 20 B.C简单构造

B 答案要么是0 要么是1 所以你全部填0或者要么填1然后算就好了 #include<bits/stdc.h> using namespace std; using ll long long; const int N 1e510; int n;void solve() {//全0 全1&#xff1f;string str;cin>>str;n str.size();string str1 str;int ans…

基于springboot网上图书商城源码和论文

在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括网上图书商城的网络应用&#xff0c;在外国网上图书商城已经是很普遍的方式&#xff0c;不过国内的管理网站可能还处于起步阶段。网上图书商城具有网上图书信息管理功能的选择…

Spring 的存储和获取Bean

文章目录 获取 Spring 上下文对象的方式存储 Bean 对象的方式类注解配置扫描路径&#xff08;必须&#xff09;Controller&#xff08;控制器存储&#xff09;Service&#xff08;服务&#xff09;Repository&#xff08;持久层&#xff09;Component&#xff08;工具&#xff…

【Qt无门槛入门】信号以及信号机制及其常用控件(1)

信号与信号槽 信号源&#xff1a;由哪个控件发出的信号。 信号的类型&#xff1a;用户进行不同的操作&#xff0c;就可能出发不同的信号。 信号处理的方式:槽&#xff08;slot&#xff09;某个对象接收到这个信号之后&#xff0c;就会做一些相关的处理动作。但是Qt对象不会无故…

ANN论文总结

本文主要是个人笔记&#xff0c;记录与存储相关的ANN工作&#xff0c;想着写都写了不如发出来与大家分享&#xff0c;大多写得比较简单有些稍微详细一点&#xff0c;内容仅供参考。 CognitiveSSD S. Liang, Y. Wang, Y. Lu, et al. Cognitive SSD: A Deep Learning Engine for…

按配置数据绘制配置型地图marker的icon,自定义marker

一、需求 需要自定义配置数据的marker&#xff0c;其中图片内容要灵活可配置自动生成。此处项目用的百度地图。 效果图&#xff1a; 二、思路 用背景图canvas绘制数字的方式生成icon的图片资源。 再将icon生成对应地图marker。 三、代码 canvasImg.js <!-- * descrip…

“东坡庙会·回家过年”活动正式启动

1月26日下午&#xff0c;“东坡庙会回家过年”启动仪式在黄冈市遗爱湖东坡广场隆重举行。启动仪式以回家过年为故事主线&#xff0c;黄冈历史名人、近现代名人为引&#xff0c;编排了精彩的传统文艺节目&#xff0c;展现武鄂黄黄一家亲、全国人民一家亲、古今名人归故里的黄冈年…