当前位置: 首页 > news >正文

【力扣·每日一题】1774. 最接近目标价格的甜点成本 (dfs搜索 动态规划 Go)

题目链接

题意

你打算做甜点,现在需要购买配料。目前共有 n 种冰激凌基料和 m 种配料可供选购。而制作甜点需要遵循以下几条规则:

必须选择 一种 冰激凌基料。
可以添加 一种或多种 配料,也可以不添加任何配料。
每种类型的配料 最多两份 。
给你以下三个输入:

baseCosts ,一个长度为 n 的整数数组,其中每个 baseCosts[i] 表示第 i 种冰激凌基料的价格。
toppingCosts,一个长度为 m 的整数数组,其中每个 toppingCosts[i] 表示 一份 第 i 种冰激凌配料的价格。
target ,一个整数,表示你制作甜点的目标价格。
你希望自己做的甜点总成本尽可能接近目标价格 target 。

返回最接近 target 的甜点成本。如果有多种方案,返回 成本相对较低 的一种。

思路

思路1:
n,m只有10,所以采用dfs或状态压缩枚举遍历每一种可能性。边界条件为把所有的配料枚举完。每次记录一下当前做的甜点的成本,维护最接近target的。
时间复杂度 O ( n ∗ 3 m ) O(n*3^m) O(n3m)
思路2:
实际上是个背包问题

代码

var ans int
var target int 
var toppingCosts []int

func abs(x int) int {
    if x >= 0 {
        return x
    }
    return -x
}

func dfs(cnt, now int) {
   if abs(ans-target) >= abs(now-target) {
        if  abs(ans-target) > abs(now-target) {
            ans = now
        }else{
            if ans > now {
                ans = now
            }
        }
    }
    if cnt == len(toppingCosts) {
        return 
    }
    dfs(cnt+1,now+toppingCosts[cnt]*2)
    dfs(cnt+1,now+toppingCosts[cnt])
    dfs(cnt+1,now)
}

func closestCost(baseCosts []int, toppingCosts1 []int, target1 int) int {
    target = target1
    toppingCosts = toppingCosts1
    //回溯
    ans = 100000
    for _,val := range baseCosts {
        if ans > val {
            ans = val
        }
    }
    for _,val := range baseCosts {
        dfs(0,val)
    }
    return ans
}

相关文章:

  • 神经网络的激活函数
  • Java23种设计模式-行为型模式之中介者模式
  • Synchronized关键字的深入分析
  • Qt:学习笔记一
  • QML中使用正则表达式
  • Android --- SharedPreferences
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • 【AHK】 MacOS复制粘贴习惯/MacOS转win键位使用习惯修改建议
  • ChatGpt大模型入门
  • 链表基础知识详解(非常详细简单易懂)
  • 计算机设计大赛 深度学习大数据物流平台 python
  • 突发技术故障对工作进程的影响及其应对策略——以电脑硬盘损坏为例
  • Activiti7工作流(二)
  • [附源码]计算机毕业设计大学生心理测评系统
  • 【spring——命名空间与自动装配】P命名、C命名、Util命名、基于名字自动装配、基于类型自动装配、外部properties文件引入
  • 数据结构—List集合
  • 博图Modbus组态及参数设定源码
  • DockerCompose安装、使用 及 微服务部署实操
  • 非零基础自学Golang 2 开发环境 2.4 Git 安装
  • 06 估计量的评优准则
  • [附源码]计算机毕业设计校刊投稿系统Springboot程序
  • 【Kotlin 协程】协程异常处理 ② ( SupervisorJob 协程 | supervisorScope 协程作用域构建器函数 )
  • 【世界杯】free-api-worldcup2022 免费世界杯API
  • Qt OpenGL(二十五)——Qt OpenGL 核心模式-Qt封装的函数实现彩色三角形
  • LeetCode 0542. 01 矩阵
  • 【C++智能指针】智能指针的发展和循环引用的原理和解决
  • 央企招聘:正式编制!八险三金!各项福利!中国邮政招人啦!
  • 欧拉公式 Euler‘s Formula
  • 0.安装和配置
  • redis我记不住的那些命令(六)
  • Spring - @PostConstruct 源码解析
  • JS 正则表达式常用方法