【坚持不懈的每日一题——力扣篇】1774. 最接近目标价格的甜点成本(中等)-- dfs / dp
创始人
2024-03-18 07:41:09
0

GitHub同步更新(已分类):Data_Structure_And_Algorithm-Review

公众号:URLeisure 的复习仓库
公众号二维码见文末

以下是本篇文章正文内容,下面案例可供参考。


一、题目描述

  • 力扣今天推的每日一题是道中等题 。

在这里插入图片描述

  • 示例 1:

输入:baseCosts = [1,7], toppingCosts = [3,4], target = 10
输出:10
解释:考虑下面的方案组合(所有下标均从 0 开始):

  • 选择 1 号基料:成本 7
  • 选择 1 份 0 号配料:成本 1 x 3 = 3
  • 选择 0 份 1 号配料:成本 0 x 4 = 0
    总成本:7 + 3 + 0 = 10 。
  • 示例 2:

输入:baseCosts = [2,3], toppingCosts = [4,5,100], target = 18
输出:17
解释:考虑下面的方案组合(所有下标均从 0 开始):

  • 选择 1 号基料:成本 3
  • 选择 1 份 0 号配料:成本 1 x 4 = 4
  • 选择 2 份 1 号配料:成本 2 x 5 = 10
  • 选择 0 份 2 号配料:成本 0 x 100 = 0
    总成本:3 + 4 + 10 + 0 = 17 。不存在总成本为 18 的甜点制作方案。
  • 示例 3:

输入:baseCosts = [3,10], toppingCosts = [2,5], target = 9
输出:8
解释:可以制作总成本为 8 和 10 的甜点。返回 8 ,因为这是成本更低的方案。

  • 示例 4:

输入:baseCosts = [10], toppingCosts = [1], target = 1
输出:10
解释:注意,你可以选择不添加任何配料,但你必须选择一种基料。

  • 提示
  • n == baseCosts.length
  • m == toppingCosts.length
  • 1 <= n, m <= 10
  • 1 <= baseCosts[i], toppingCosts[i] <= 10410^4104
  • 1 <= target <= 10410^4104

二、解题思路

1. 暴搜 -> DFS

  • 提示中 1 <= n, m <= 10 ,一看到范围就想到暴力搜索了 QAQ。

  • 枚举所有基料,对每种基料搜索所有配料的可能情况,返回最优解。

  • 每种基料有三种选择:不选,选 1 个,选 2 个;

在这里插入图片描述

  • 当 cost > target 时,成本已经超过了目标价格,后续就不用再判断了。

  • 按上图编写算法,添加终止条件 -> cost > target 时终止即可。

2. 动态规划

  • 今天有点忙,没写,后续补上。

三、解题代码

1. 暴搜 -> DFS

class Solution {
public:// 比较大小,设个最大值int ans = 0x3f3f3f3f;int closestCost(vector &baseCosts, vector &toppingCosts, int target) {for (int i: baseCosts) {dfs(0, i, toppingCosts, target);}return ans;}void dfs(int i, int cost, vector toppingCosts, int target) {int a = abs(target - ans), b = abs(target - cost);// 判断最优解if (a > b) ans = cost; // 选个最接近 target 的花费if (a == b && ans > cost) ans = cost; // cost1=8 target=10 cost2=12 ---> 最优解为成本少的 8 // 终止条件if (cost > target) return;for (int j = i; j < toppingCosts.size(); ++j) {dfs(j + 1, cost + toppingCosts[j], toppingCosts, target);dfs(j + 1, cost + 2 * toppingCosts[j], toppingCosts, target);}}
};

2. 动态规划

  • 没写,后续补上。

关注公众号,感受不同的阅读体验

请添加图片描述


下期预告: 明天的每日一题

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...