【LeetCode:2742. 给墙壁刷油漆 + 递归 + 记忆化搜索 + dp】

ops/2024/9/19 0:47:10/ 标签: leetcode, 算法, java, 递归, 记忆化搜索, 缓存, dp

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述
在这里插入图片描述

🍔 目录

    • 🚩 题目链接
    • ⛲ 题目描述
    • 🌟 求解思路&实现代码&运行结果
    • 💬 共勉

🚩 题目链接

  • 2742. 给墙壁刷油漆

⛲ 题目描述

给你两个长度为 n 下标从 0 开始的整数数组 cost 和 time ,分别表示给 n 堵不同的墙刷油漆需要的开销和时间。你有两名油漆匠:

  • 一位需要 付费 的油漆匠,刷第 i 堵墙需要花费 time[i] 单位的时间,开销为 cost[i] 单位的钱。
  • 一位 免费 的油漆匠,刷 任意 一堵墙的时间为 1 单位,开销为 0 。但是必须在付费油漆匠 工作 时,免费油漆匠才会工作。

请你返回刷完 n 堵墙最少开销为多少。

示例 1:

输入:cost = [1,2,3,2], time = [1,2,3,2]
输出:3
解释:下标为 0 和 1 的墙由付费油漆匠来刷,需要 3 单位时间。同时,免费油漆匠刷下标为 2 和 3 的墙,需要 2 单位时间,开销为 0 。总开销为 1 + 2 = 3 。
示例 2:

输入:cost = [2,3,4,2], time = [1,1,1,1]
输出:4
解释:下标为 0 和 3 的墙由付费油漆匠来刷,需要 2 单位时间。同时,免费油漆匠刷下标为 1 和 2 的墙,需要 2 单位时间,开销为 0 。总开销为 2 + 2 = 4 。

提示:

1 <= cost.length <= 500
cost.length == time.length
1 <= cost[i] <= 106
1 <= time[i] <= 500

🌟 求解思路&实现代码&运行结果


dp_51">⚡ 递归 + 记忆化搜索 + dp

🥦 求解思路
  1. 思路1,设计一个三个参数的递归参数dfs(i,cnt,t)来返回最少开销。其中i表示当前来到的当前位置,cnt表示此时选择了多少个付费的工人,t表示付费工人的工作时间。遍历数组,每个位置可以选择或者不选。最终返回最小的开销。这样做,需要枚举的状态太多了,即使是缓存,也会超限,所以,需要继续优化。
  2. 思路2,在思路1的基础上,减少状态,dfs(i,t)来返回最少开销。i表示来到当前的位置,此时t表示后续还可以雇佣的免费工人,和思路1的区别在于,思路1的时间是只记录付费工人时间,思路2需要做的不仅仅是付费工人时间,免费工人也需要记录,实现时如果当前位置选,加当前位置的时间,如果不选,此时的位置需要交给免费工人来做,直接减1。最后,如果当前的 t > n - 1 - i,表示无需进行后续的过程,找到了一种开销。结果返回众多开销中最小的即可。
  3. 有了基本的思路,接下来我们就来通过代码来实现一下。
🥦 实现代码
java">class Solution {int[] cost;int[] time;int[][] map;int n;public int paintWalls(int[] cost, int[] time) {this.cost = cost;this.time = time;this.n = cost.length;this.map = new int[n][n * 2 + 1];for (int i = 0; i < map.length; i++) {Arrays.fill(map[i], -1);}return dfs(0, 0);}private int dfs(int i, int t) {if (t > n - i - 1) {return 0;}if (i >= n) {return Integer.MAX_VALUE / 2;}int k = t + n;if (map[i][k] != -1) {return map[i][k];}int p1 = dfs(i + 1, t + time[i]);if (p1 != Integer.MAX_VALUE / 2) {p1 += cost[i];}int p2 = dfs(i + 1, t - 1);return map[i][k] = Math.min(p1, p2);}
}
🥦 运行结果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述


http://www.ppmy.cn/ops/54728.html

相关文章

Node.js全栈指南:看官方文档的艺术

上回我们说到啊&#xff0c;创建了一个极简的 Web 服务&#xff0c;监听了端口&#xff0c;设置了正确的编码&#xff0c;成功地在浏览器看到了返回的内容 “你好&#xff0c;世界&#xff01;”。 那么本章节呢&#xff0c;我们通过一个简单的例子来分析&#xff0c;如何有效…

对于业务中的一些生效时间处理理解

在业务中常会遇到对于一些事件、规则等等有设置生效时间&#xff0c;它们无非也就两种大类型 时间是具体的时间&#xff0c;比如&#xff08;2024-06-28 10:00:00到 2024-06-29 20:00:00&#xff09; 这种类型可以采取的方式有很多&#xff0c;比如可以直接转换为时间戳比较 …

cube-studio开源一站式机器学习平台,在线ide,jupyter,vscode,matlab,rstudio,ssh远程连接,tensorboard

全栈工程师开发手册 &#xff08;作者&#xff1a;栾鹏&#xff09; 一站式云原生机器学习平台 前言 开源地址&#xff1a;https://github.com/tencentmusic/cube-studio cube studio 腾讯开源的国内最热门的一站式机器学习mlops/大模型训练平台&#xff0c;支持多租户&…

代码随想三刷动态规划篇5

代码随想三刷动态规划篇5 377. 组合总和 Ⅳ题目代码 57. 爬楼梯&#xff08;第八期模拟笔试&#xff09;题目代码 322. 零钱兑换题目代码 279. 完全平方数题目代码 377. 组合总和 Ⅳ 题目 链接 代码 class Solution {public int combinationSum4(int[] nums, int target) {…

使用 c# + vue 制作 DevExpress 报表

theme: smartblue 一、下载 DevExpress 下载地址: https://docs.devexpress.com/XtraReports/400128/product-information/devexpress-reporting-installer 二、创建报表 选择你要放置的文件夹&#xff0c;依次选择 “Add”&#xff0c; “New Item...” 第一次显示时可能没有详…

NoSQL之Redis配置与管理

目录 一、关系型数据库和非关系型数据库 1.关系型数据库 2.非关系型数据库 3.关系型数据库和非关系型数据库区别 二、Redis 1.Redis简介 2.Redis 的优点 3.Redis 使用场景 4.Redis的数据类型 5.哪些数据适合放入缓存中&#xff1f; 6.Redis为什么这么快&#xff1f;…

GPT-5或于一年半后发布?浅谈智能的飞跃与未来

一、前言 IT之家6月22日消息&#xff0c;在美国达特茅斯工程学院周四公布的采访中&#xff0c;OpenAI首席技术官米拉穆拉蒂被问及GPT-5是否会在明年发布&#xff0c;给出了肯定答案并表示将在一年半后发布。 技术的风暴从未停止&#xff0c;人工智能作为这场风暴中的旋风&…

SpringMVC的架构有什么优势?——控制器(一)

文章目录 控制器(Controller)1. 控制器(Controller)&#xff1a;2. 请求映射(Request Mapping)&#xff1a;3. 参数绑定(Request Parameters Binding)&#xff1a;4. 视图解析器(View Resolver)&#xff1a;5. 数据绑定(Data Binding)&#xff1a;6. 表单验证(Form Validation)…

Supabase 自托管部署实践

Supabase 是 Firebase 的开源替代品。使用 Postgres 数据库、身份验证、即时 API、边缘函数、实时订阅、存储和向量嵌入来启动您的项目。 Supabase介绍 Supabase 是一个开源的后端即服务&#xff08;BaaS&#xff09;平台&#xff0c;提供了一系列工具和服务&#xff0c;帮助…

机器人控制系列教程之并联机器人简介

背景 根据其构件的连接是否构成闭环形式&#xff0c;机器人可分为串联机器人和并联机器人两种。对于串联机器人&#xff0c;其所有的构件以串联的结构形式连接起来&#xff0c;在空间组成一种开环结构&#xff0c;因而具有工作空间大&#xff0c;灵活性好等优点&#xff0c;但…

C++ 指针介绍

指针是C编程语言中的一个强大且重要的特性。它允许程序员直接操作内存地址&#xff0c;从而提供了对低级别内存的访问和控制。虽然指针在使用时可能比较复杂且容易出错&#xff0c;但它们在提高程序效率和灵活性方面有着不可替代的作用。本文将介绍C指针的基本概念、用法及其应…

Flutter循序渐进==>数据结构(列表、映射和集合)和错误处理

导言 填鸭似的教育确实不行&#xff0c;我高中时学过集合&#xff0c;不知道有什么用&#xff0c;毫无兴趣&#xff0c;等到我学了一门编程语言后&#xff0c;才发现集合真的很有用&#xff1b;可以去重&#xff0c;可以看你有我没有的&#xff0c;可以看我有你没有的&#xf…

HarmonyOS ArkUi ArkWeb加载不出网页问题踩坑

使用 使用还是比较简单的&#xff0c;直接贴代码了 别忘了配置网络权限 Entry Component struct WebPage {State isAttachController: boolean falseState url: string State title: string Prop controller: web_webview.WebviewController new web_webview.WebviewCont…

如何跑起来一个前后端项目

后端部署 第一步配置自己的maven 第二步优先导入自己本地jar包当本地没有在从远程下载 第三步找到配置文件 第四步成功运行后端部署完毕 前端部署 第一步看看项目node_modules有没有文件如果有就是已经安装好了对应的依赖&#xff0c;没有执行npm install 第二步运行即可

最新AIGC系统源码-ChatGPT商业版系统源码,自定义ChatGPT指令Promp提示词,AI绘画系统,AI换脸、多模态识图理解文档分析

目录 一、前言 系统文档 二、系统演示 核心AI能力 系统快速体验 三、系统功能模块 3.1 AI全模型支持/插件系统 AI模型提问 文档分析 ​识图理解能力 3.2 GPts应用 3.2.1 GPTs应用 3.2.2 GPTs工作台 3.2.3 自定义创建Promp指令预设应用 3.3 AI专业绘画 3.3.1 文…

24 年程序员各岗位薪资待遇汇总(最新)

大家好&#xff0c;我是程序员鱼皮。今天分享 24 年 6 月最新的程序员各岗位薪资待遇汇总。 数据是从哪儿来的呢&#xff1f;其实很简单&#xff0c;BOSS 直聘上有一个免费的薪酬查询工具&#xff0c;只要认证成为招聘者就能直接看&#xff0c;便于招聘者了解市场&#xff0c;…

Linux学习第54天:Linux WIFI 驱动:蓝星互联

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 数字化、现代化的今天&#xff0c;随处的WIFI给与了大众极大的方便&#xff0c;也感受到了科技的力量。万物互联、无线互联越来越成为一个不可逆转的趋势。现在比较火…

GPT-5的即将登场

人工智能领域正经历着一场前所未有的变革&#xff0c;而其中大语言模型的进步尤为瞩目。继GPT-4取得巨大成功后&#xff0c;OpenAI即将推出的GPT-5被寄予厚望。作为新一代大语言模型&#xff0c;GPT-5在各个方面都有望实现显著突破。本文将探讨GPT-5的潜在特性、应用前景以及其…

CMakeList整理大全

0. CMake应用示例 之前我们也整理过cmake 引入第三方库&#xff08;头文件目录、库目录、库文件&#xff09;。但是这里面整理的内容其实是不全的。所以我们需要进一步将CMake的使用整理好。以供后面的学习的工程师来检索查询。 cmake-template ├── CMakeLists.txt └──…

Lua实现链表(面向对象应用)

Lua实现面向对象 面向对象核心三要素Lua面向对象大致原理面向对象示例继承与多态示例 面向对象核心三要素 1.封装&#xff1a;对一个事物的抽象为一些属性和行为动作的集合&#xff0c;封装将属性和行为动作&#xff08;操作数据的方法&#xff09;绑定在一起&#xff0c;并隐藏…