【leetcode】LCP51. 烹饪料理

news/2024/11/24 12:06:00/

【leetcode】LCP51. 烹饪料理

  • 题目
  • 思路
  • 代码

在这里插入图片描述

题目

leetcode原题链接

欢迎各位勇者来到力扣城,城内设有烹饪锅供勇者制作料理,为自己恢复状态。
勇者背包内共有编号为 0 ~ 4 的五种食材,其中 materials[j] 表示第 j 种食材的数量。通过这些食材可以制作若干料理,cookbooks[i][j] 表示制作第 i 种料理需要第 j 种食材的数量,而 attribute[i] = [x,y] 表示第 i 道料理的美味度 x 和饱腹感 y。
在饱腹感不小于 limit 的情况下,请返回勇者可获得的最大美味度。如果无法满足饱腹感要求,则返回 -1。
注意:每种料理只能制作一次。

示例 1:
输入:materials = [3,2,4,1,2]
cookbooks = [[1,1,0,1,2],[2,1,4,0,0],[3,2,4,1,0]]
attribute = [[3,2],[2,4],[7,6]]
limit = 5
输出:7
解释:
食材数量可以满足以下两种方案:
方案一:制作料理 0 和料理 1,可获得饱腹感 2+4、美味度 3+2
方案二:仅制作料理 2, 可饱腹感为 6、美味度为 7
因此在满足饱腹感的要求下,可获得最高美味度 7

示例 2:
输入:materials = [10,10,10,10,10]
cookbooks = [[1,1,1,1,1],[3,3,3,3,3],[10,10,10,10,10]]
attribute = [[5,5],[6,6],[10,10]]
limit = 1
输出:11
解释:通过制作料理 0 和 1,可满足饱腹感,并获得最高美味度 11

提示:
materials.length == 5
1 <= cookbooks.length == attribute.length <= 8
cookbooks[i].length == 5
attribute[i].length == 2
0 <= materials[i], cookbooks[i][j], attribute[i][j] <= 20
1 <= limit <= 100

思路

在这里插入图片描述

  • 每道料理可选可不选(材料足够时可选),可以使用回溯

  • 返回条件是每一道料理都遍历过了(即选了或没选),索引超出料理数组最大索引,此时判断饱腹感y是否满足要求,满足则更新结果。最后记得返回。

  • 循环遍历当前料理后的每一道料理,如果材料还够就选择该料里

  • 回溯时要判断该料理是否选择了,选择了要归还材料并还原x、y

做题时忽略了题目要求:如果无法满足饱腹感要求,则返回 -1。所以记得res初始化为-1

代码

在这里插入图片描述

var perfectMenu = function (materials, cookbooks, attribute, limit) {let len = cookbooks.lengthlet res = -1backtracking(0, 0, 0)return resfunction backtracking(startIndex, x, y) {if (startIndex >= len) {// 饱腹感满足要求才更新美味度if (y >= limit) {res = Math.max(res, x)}return}// 遍历每一道料理for (let i = startIndex; i < len; i++) {// 得到该料理的每一种材料需求let [a, b, c, d, e] = [...cookbooks[i]]// flag用于标记该道料理有没有被选择,方便回溯的时候将材料归还回去let flag = 0// 所有材料都够用才选择该料理if (a <= materials[0] && b <= materials[1] && c <= materials[2] && d <= materials[3] && e <= materials[4]) {// 更新美味度和饱腹感x += attribute[i][0]y += attribute[i][1]// 消耗材料materials[0] -= amaterials[1] -= bmaterials[2] -= cmaterials[3] -= dmaterials[4] -= e// 标记选择了该料理flag = 1}// 递归下一道料理backtracking(i + 1, x, y)// 回溯回来,根据flag判断用不用归还材料和还原美味度、饱腹感if (flag) {x -= attribute[i][0]y -= attribute[i][1]materials[0] += amaterials[1] += bmaterials[2] += cmaterials[3] += dmaterials[4] += e}}
}}

http://www.ppmy.cn/news/124271.html

相关文章

营养早餐DIY 豆浆机/榨汁机怎么选

频频爆出的食品安全问题让追求时尚健康的都市白领打起了自制早餐的主意。诸如豆浆、果汁等都是营养早餐不可或缺的一部分&#xff0c;这就造成了豆浆机与榨汁机的热销。然而很多人对两者的区别不是很了解&#xff0c;因此在选择上感到困惑。 豆浆机与榨汁机的区别一&#xff1a…

苹果的廉价机,你也认为“真香”吗?

作者 | 若卡 本文经授权转自创业邦&#xff08;ID&#xff1a;ichuangyebang&#xff09; 新款iPhone SE发布一个月了。 5月11日&#xff0c;苹果产品营销副总裁格雷格乔斯瓦克(GregJoswiak)接受采访时表示&#xff0c;疫情期间推出的iPhone SE受到追捧&#xff0c;销量超出预期…

spring5(五):AOP操作

spring5&#xff08;五&#xff09;&#xff1a;AOP操作 前言一、代理模式1、场景模拟2、代理模式2.1 概念2.2 静态代理2.3 动态代理 二、AOP概述1、什么是 AOP?2、相关术语3、作用 三、AOP底层原理1、AOP 底层使用动态代理2、AOP&#xff08;JDK 动态代理&#xff09;2.1 编写…

九阳真经(1-5重)

一举手,前后左右要有定向.起动举动未能由己,要悉心体认,随人所动,随曲就伸,不丢不顶. 勿自伸缩.彼有力,我亦有力,我力在先.彼无力,我亦无力,我意仍在先.要刻刻留心.挨何处, 心要用在何处,须向不丢不顶中讨消息.切记一静无有不静,静须静如山岳.所谓他强由他强, 清风拂山冈.一动无…

EM中等效原理

EM中等效原理 一、基本简介 电磁等效定理对于简化许多问题的解是有用的。此外&#xff0c;它们还提供了对麦克斯韦系统电磁场行为的物理见解。它们与唯一性定理和惠更斯原理密切相关。一个应用是它们在研究来自孔径天线或来自激光腔输出的辐射中的用途。 等效源原理&#xf…

快来,一起复习一下乐观锁悲观锁

背景 工作也有四年了&#xff0c;基础的东西许久不看有些遗忘。一起来复习一下吧 前引 不管是乐观锁&#xff0c;还是悲观锁。更像是一种思想。 乐观锁比较适用于读多写少的情况(多读场景)&#xff0c;悲观锁比较适用于写多读少的情况(多写场景)。 乐观锁 1.CAS 实现&…

批判马斯洛需求层次模型

再次批判马斯洛需求层次模型&#xff0c;有啥缺陷&#xff1f; 趣讲大白话&#xff1a;文化不同&#xff0c;心理不同 【趣讲信息科技182期】 **************************** 每个民族的文化心理结构都不一样 常常低估文化对人的影响 有一门心理学分支&#xff0c;文化心理学 专…

度量学习:使用多类N对损失改进深度度量学习

度量学习系列 Author: 码科智能 使用多类N对损失改进深度度量学习 度量学习是ReID任务中常用的方式之一&#xff0c;今天来看下一篇关于如何改进度量学习的论文。来自2016年NeurIPS上的一篇论文&#xff0c;被引用超过900次。 论文&#xff1a;Improved Deep Metric Learni…