LC 2861. 最大合金数

2861. 最大合金数

难度: 中等

题目大意:

假设你是一家合金制造公司的老板,你的公司使用多种金属来制造合金。现在共有 n 种不同类型的金属可以使用,并且你可以使用 k 台机器来制造合金。每台机器都需要特定数量的每种金属来创建合金。

对于第 i 台机器而言,创建合金需要 composition[i][j]j 类型金属。最初,你拥有 stock[i]i 类型金属,而每购入一份 i 类型金属需要花费 cost[i] 的金钱。

给你整数 nkbudget,下标从 1 开始的二维数组 composition,两个下标从 1 开始的数组 stockcost,请你在预算不超过 budget 金钱的前提下,最大化 公司制造合金的数量。

所有合金都需要由同一台机器制造。

返回公司可以制造的最大合金数。

提示:

  • 1 <= n, k <= 100
  • 0 <= budget <= 10^8
  • composition.length == k
  • composition[i].length == n
  • 1 <= composition[i][j] <= 100
  • stock.length == cost.length == n
  • 0 <= stock[i] <= 10^8
  • 1 <= cost[i] <= 100

示例 1:

输入:n = 3, k = 2, budget = 15, composition = [[1,1,1],[1,1,10]], stock = [0,0,0], cost = [1,2,3]
输出:2
解释:最优的方法是使用第 1 台机器来制造合金。
要想制造 2 份合金,我们需要购买:
- 2 份第 1 类金属。
- 2 份第 2 类金属。
- 2 份第 3 类金属。
总共需要 2 * 1 + 2 * 2 + 2 * 3 = 12 的金钱,小于等于预算 15 。
注意,我们最开始时候没有任何一类金属,所以必须买齐所有需要的金属。
可以证明在示例条件下最多可以制造 2 份合金。

分析

本题难度主要在理解题的意思,变量有点多,可能容易晕,类似什么最值,我们首先可以考虑用二分法,这题显然是可以用的,单调性是: 合金越多,要的钱就越多,合金越少,那么所需要的钱就是足够的,所以我们可以根据这个性质来进行二分

二分答案

class Solution {
public:using LL = long long;int maxNumberOfAlloys(int n, int k, int budget, vector<vector<int>>& composition, vector<int>& stock, vector<int>& cost) {// mid 生产mid个合金,u是选auto check = [&](int mid, int u) {LL left = budget;for (int i = 0; i < n; i ++) {if (stock[i] >= (LL)mid * composition[u][i]) continue; // 如果当前储存量够left -= ((LL)mid * composition[u][i] - stock[i]) * cost[i];// 减去所需要的费用if (left < 0) return false; // 如果不够了,说明合金是做不出来的,直接返回false}return true; // 如果没有什么问题,就返回true};int res = 0;for (int i = 0; i < k; i ++ ) {int l = 0, r = 1e9; // 不能用1e8while (l < r) {int mid = l + r + 1 >> 1;if (check(mid, i)) l = mid;else r = mid - 1;}res = max(res, l);// 取一个最大值}return res;}
};

时间复杂度: O ( n k l o g C ) O(n k logC) O(nklogC)

结束了

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

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

相关文章

python在线聊天室(带聊天保存)

python Socket在线聊天室(带聊天保存) 需求功能 1.聊天信息保存功能(服务端会把信息保存到一个txt里面) 2.使用pyqt5框架作为一个可视化界面 3.具备一个服务端和多个客户端的功能 4.具备离线加入黑名单(离线踢出) 5.具备在线加入黑名单(在线加入黑名单被踢出) 6.具备群聊功能…

搜索<1>——DFS与回溯

前言:本系列(搜索)博客主要介绍的是用DFS解决一些问题&#xff0c;并不是图论中的DFS dfs相信大家都有了解&#xff0c;TA是一个图论中的算法。 中心思想就是:只要干不死&#xff0c;就往死里干! 具体来说&#xff0c;就是只要符合要求&#xff0c;就一直往前搜&#xff0c;…

算法训练营Day59(单调栈2)

503.下一个更大元素II 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 提醒 这道题和 739. 每日温度 几乎如出一辙&#xff0c;可以自己尝试做一做 class Solution:def nextGreaterElements(self, nums: List[int]) -> List[int]:dp [-1] * len(n…

什么是网络?

你是一台电脑&#xff0c;你的名字叫 A 很久很久之前&#xff0c;你不与任何其他电脑相连接&#xff0c;孤苦伶仃。 直到有一天&#xff0c;你希望与另一台电脑 B 建立通信&#xff0c;于是你们各开了一个网口&#xff0c;用一根网线连接了起来。 用一根网线连接起来怎么就能&…

【大数据】Flink 架构(一):系统架构

Flink 架构&#xff08;一&#xff09;&#xff1a;系统架构 1.Flink 组件1.1 JobManager1.2 ResourceManager1.3 TaskManager1.4 Dispatcher 2.应用部署2.1 框架模式2.2 库模式 3.任务执行4.高可用设置4.1 TaskManager 故障4.2 JobManager 故障 Flink 是一个用于状态化并行流处…

第九篇【传奇开心果系列】beeware的toga开发移动应用示例:人口普查手机应用

传奇开心果博文系列 系列博文目录beeware的toga开发移动应用示例系列博文目录一、项目目标二、安装依赖三、实现应用雏形示例代码四、扩展功能和组件的考量五、添加更多输入字段示例代码六、添加验证功能示例代码七、添加数据存储功能示例代码八、添加数据展示功能示例代码九、…

JavaWeb,Vue的学习(上)

概述 Vue的两个核心功能 声明式渲染&#xff1a;Vue 基于标准 HTML 拓展了一套模板语法&#xff0c;使得我们可以声明式地描述最终输出的 HTML 和 JavaScript 状态之间的关系。响应性&#xff1a;Vue 会自动跟踪 JavaScript 状态并在其发生变化时响应式地更新 DOM ViteVue3项目…

Image Enhancement Guided Object Detection in Visually Degraded Scenes

Abstract 目标检测准确率在视觉退化场景下降严重。一个普遍的解决方法就是对退化图像进行增强然后再执行目标检测。但是&#xff0c;这是一种次优的方案&#xff0c;而且未必对目标检测的准确率有提升&#xff0c;因为图像增强和目标检测两个任务的不同。为了解决这个问题&…

【算法专题】动态规划之回文子串问题

动态规划6.0 动态规划 - - - 回文子串问题1. 回文子串2. 最长回文子串3. 分割回文串Ⅳ4. 分割回文串Ⅱ5. 最长回文子序列6. 让字符串成为回文串的最少插入次数 动态规划 - - - 回文子串问题 1. 回文子串 题目链接 -> Leetcode -647.回文子串 Leetcode -647.回文子串 题目…

elasticsearch8.x版本docker部署说明

前提&#xff0c;当前部署没有涉及证书和https访问 1、环境说明,我采用三个节点&#xff0c;每个节点启动两个es&#xff0c;用端口区分 主机角色ip和端口服务器Amaster192.168.2.223:9200服务器Adata192.168.2.223:9201服务器Bdata,master192.168.2.224:9200服务器Bdata192.1…

5_机械臂运动学基础_矩阵

上次说的向量空间是为矩阵服务的。 1、学科回顾 从科技实践中来的数学问题无非分为两类&#xff1a;一类是线性问题&#xff0c;一类是非线性问题。线性问题是研究最久、理论最完善的&#xff1b;而非线性问题则可以在一定基础上转化为线性问题求解。 线性变换&#xff1a; 数域…

【代码随想录-数组】螺旋矩阵 II

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

设计模式:简介及基本原则

简介 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问&#xff0c;设计模式于己于他人于系统都是多赢的&#xff0c;设计模式使代码编制真正工程化&#xff…

Jenkins邮件推送配置

目录 涉及Jenkins插件&#xff1a; 邮箱配置 什么是授权码 在第三方客户端/服务怎么设置 IMAP/SMTP 设置方法 POP3/SMTP 设置方法 获取授权码&#xff1a; Jenkins配置 从Jenkins主面板System configuration>System进入邮箱配置 在Email Extension Plugin 邮箱插件…

docker compose实现mysql一主多从

参考了很多博客&#xff0c;死磕了几天&#xff0c;最终跑起来了&#xff0c;不容易&#xff0c;晚上喝瓶82年可乐庆祝下。 1、整体文件结构&#xff0c;这里忽略log、conf、data映射目录 2、docker-compose.yml文件内容如下&#xff1a; version: 3.3 services:mysql-master…

Elasticsearch中的分词器的基本介绍以及使用

目录 一、分词器的基本概念 二、分词器类别 &#xff08;1&#xff09;默认分词器 &#xff08;2&#xff09;IK分词器 &#xff08;3&#xff09;拼音分词器 &#xff08;4&#xff09;自定义分词器 一、分词器的基本概念 在Elasticsearch中&#xff0c;分词器&#xff…

04_前后端交互技术之Ajax异步请求

本课目标 理解什么是同步请求和异步请求理解Ajax的请求原理掌握Ajax的基本用法掌握课堂案例 1. 同步请求与异步请求的区别 1.1 什么是同步请求 同步请求&#xff1a;发送请求后需要等待服务端响应&#xff0c;同步请求阻止代码的执行&#xff0c;这会导致屏幕上出现“冻结”…

Linux exit命令教程:结束当前的登录会话(附案例详解和注意事项)

Linux exit命令介绍 exit命令用于结束当前的登录会话。当你在命令行界面&#xff08;shell&#xff09;运行exit命令时&#xff0c;它会终止你当前的shell会话。 在命令行界面或shell脚本中执行exit命令默认会直接退出终端&#xff0c;或者你还可以在exit命令后添加一个参数&…

Linux中断 -- 中断路由、优先级、数据和标识

目录 1.中断路由 2.中断优先级 3.中断平衡 4.Linux内核中重要的数据结构 5.中断标识 承前文&#xff0c;本文从中断路由、优先级、数据结构和标识意义等方面对Linux内核中断进行一步的解析。 1.中断路由 Aset affinity flow GIC文中有提到SPI类型中断的路由控制器寄存器为…

华为HCIP Datacom H12-831 卷14

多选题 1、以下哪些Community属性可以保证BGP路由条目的传播范围只在AS内? A No_Export B No_Export_Subconfed C Interne D No_Advertise 正确答案 A,B 解析&#xff1a;Internet&#xff1a;缺省情况下&#xff0c;所有的路由都属于internet团体。具有此属性的路由…