【Leetcode每日一题】 动态规划 - 简单多状态 dp 问题 - 删除并获得点数(难度⭐⭐)(76)
1. 题目解析
题目链接:LCR 091. 粉刷房子

这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。
2.算法原理
1. 状态定义
在解决这类问题时,我们首先需要根据题目的具体要求来定义状态。针对房屋粉刷问题,我们可以定义一个二维数组dp来表示状态,其中dp[i][j]表示粉刷到第i个位置时,且最后一个位置粉刷成颜色j(j可以是红、蓝、绿三种颜色)时的最小花费。
dp[i][0]:表示粉刷到第i个位置时,最后一个位置粉刷成红色的最小花费。dp[i][1]:表示粉刷到第i个位置时,最后一个位置粉刷成蓝色的最小花费。dp[i][2]:表示粉刷到第i个位置时,最后一个位置粉刷成绿色的最小花费。
2. 状态转移方程
接下来,我们需要根据题目要求来推导状态转移方程。由于题目中规定了相邻位置不能粉刷成相同的颜色,因此在计算dp[i][j]时,我们需要考虑i-1位置的颜色,并确保与j不同。
- 对于
dp[i][0](即第i个位置粉刷成红色):- 由于不能与前一个位置颜色相同,所以前一个位置可以是蓝色或绿色。因此,状态转移方程为:
dp[i][0] = min(dp[i-1][1], dp[i-1][2]) + costs[i-1][0],其中costs[i-1][0]表示第i-1个位置粉刷成红色的花费。
- 由于不能与前一个位置颜色相同,所以前一个位置可以是蓝色或绿色。因此,状态转移方程为:
- 同理,对于
dp[i][1]和dp[i][2],我们也可以得到相应的状态转移方程:dp[i][1] = min(dp[i-1][0], dp[i-1][2]) + costs[i-1][1]dp[i][2] = min(dp[i-1][0], dp[i-1][1]) + costs[i-1][2]
3. 初始化
在填表之前,我们需要对状态数组进行初始化。由于题目没有明确指出第一个位置之前的颜色,我们可以添加一个辅助节点,并将所有颜色在该节点的花费初始化为0(或者一个不会影响后续计算的值)。这样做可以确保我们的状态转移方程在i=1时也能正确工作。
4. 填表顺序
根据状态转移方程,我们可以发现每个状态dp[i][j]都依赖于前一个位置的状态dp[i-1][k](其中k不等于j)。因此,我们需要按照从左到右的顺序来填表,以确保在计算每个状态时,其依赖的状态已经被计算出来。
5. 返回值
最后,我们需要返回粉刷完整个房屋(即最后一个位置)时的最小花费。由于我们定义了三种颜色的状态,因此需要比较这三种颜色在最后一个位置的最小花费,并返回其中的最小值。即:min(dp[n][0], min(dp[n][1], dp[n][2])),其中n是房屋的总位置数。
3.代码编写
class Solution {
public:int minCost(vector<vector<int>>& costs) {int n = costs.size();vector<vector<int>> dp(n + 1, vector<int>(3));for (int i = 1; i <= n; i++) {dp[i][0] = min(dp[i - 1][1], dp[i - 1][2]) + costs[i - 1][0];dp[i][1] = min(dp[i - 1][0], dp[i - 1][2]) + costs[i - 1][1];dp[i][2] = min(dp[i - 1][1], dp[i - 1][0]) + costs[i - 1][2];}return min(dp[n][0], min(dp[n][1], dp[n][2]));}
};
The Last
嗯,就是这样啦,文章到这里就结束啦,真心感谢你花时间来读。
觉得有点收获的话,不妨给我点个赞吧!
如果发现文章有啥漏洞或错误的地方,欢迎私信我或者在评论里提醒一声~
相关文章:
【Leetcode每日一题】 动态规划 - 简单多状态 dp 问题 - 删除并获得点数(难度⭐⭐)(76)
1. 题目解析 题目链接:LCR 091. 粉刷房子 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 1. 状态定义 在解决这类问题时,我们首先需要根据题目的具体要求来定义状态。针对房屋粉刷问题&#…...
Windows---CMD常用指令大全
CMD是什么? Windows操作系统中的命令行界面程序,全称为命令提示符 CMD可以干什么? 允许用户在文本界面下输入命令来执行各种操作,如文件管理、系统设置、软件安装等 帮助用户更好地控制和管理Windows系统 windows系统CMD指…...
消息中间件是什么?有什么用?常见的消息中间件有哪些?
1.什么是消息中间件? 消息中间件基于队列模型在网络环境中为应用系统提供同步或异步、可靠的消息传输的支撑性软件系统。 2.现实中的痛点: 1.Http请求基于请求与响应的模型,在高并发的情况下,客户端发送大量的请求达到服务器端…...
富锂锰基材料极具发展潜力 我国产业化进程加速
富锂锰基材料极具发展潜力 我国产业化进程加速 富锂锰基材料以锰元素为主,我国锰资源较丰富,相比于铁锂材料、高镍三元材料,富锂锰基材料具有一定的降本潜力。此外富锂锰基材料在能量密度、充放电倍率等方面也具有明显优势。富锂锰基材料是富…...
聚水潭和金蝶云星空单据接口对接
聚水潭和金蝶云星空单据接口对接 对接系统:金蝶云星空 金蝶K/3Cloud(金蝶云星空)是移动互联网时代的新型ERP,是基于WEB2.0与云技术的新时代企业管理服务平台。金蝶K/3Cloud围绕着“生态、人人、体验”,旨在帮助企业打造…...
OpenAI深夜震撼发布最新模型GPT-4o,送上最快速便捷教程
北京时间5月14日凌晨,有人说OpenAI一夜改变了历史。 在我们的深夜、太平洋时间的上午 10 点,OpenAI 召开春季发布会,公布了最新的GPT-4o模型,o代表Omnimodel(全能模型)。20多分钟的演示直播,展…...
没有申请域名的情况下,用navicat远程连接我们的服务器的Mysql数据库
我们可以根据公网ip用shell来远程连接 首先我们打开自己买的服务器 例如你看这个,就是我们的公网IP 如果服务器里面没有安装mysql数据库的话,那么我们可以用一个轻量级的docker来安装数据库代替一下 我们用docker弄个轻量级的mysql5.7.36,…...
Hive中小文件过多的几种处理方式
1、使用concatenate(只支持RCFile和ORC格式) 2、减少map数量,调整参数:输入合并文件相关的参数 3、减少reduce的数量(例如直接设置reduce为xx个、或者设置reduce的大小,系统自动根据大小确定reduce的个数…...
用户登录认证和权限授权(SpringSecurity、JWT、session)
文章目录 前言一、登录认证1. 问题引入2. Session2.1 实现原理2.2 过滤器Filter2.3 上下文对象 3. JWT3.2 实现步骤3.3 拦截器 HandlerInterceptorAdapter3.4 上下文对象 4. Session VS JWT 二、权限授权1. 权限类型1.1 页面权限(菜单项权限)1.2 ACL模型…...
第十二届蓝桥杯省赛真题 Java A 组【原卷】
文章目录 发现宝藏【考生须知】试题 A: 相乘试题 B: 直线试题 C : \mathrm{C}: C: 货物摆放试题 D: 路径试题 E: 回路计数试题 F : \mathrm{F}: F: 最少砝码试题 G: 左孩子右兄弟试题 H : \mathrm{H}: H: 异或数列试题 I \mathbf{I} I 双向排序试题 J : \mathrm{J}: J: 分…...
工作随机:linux 挂载LVM管理模式的磁盘
文章目录 前言一、创建一个分区二、创建PV三、创建VG四、创建LV五、格式化并挂载目录 前言 在数据库管理中,常有比较头疼的问题,就是一段时间发展后我的磁盘空间不够了,想要扩容原有的目录很是头疼,那么LVM管理的优势就体现出来了…...
打印kafka最近的消息
使用 kafka-run-class 指令,获取topic的最小offset和最大offset #查看各个分区的最小offset(这个意思就是,这个offset之前的消息已经被清除了,现在consumer是从这个offset之后开始消费): ./kafka-run-class.sh kafka.tools.GetOffsetShell …...
e行64位V11.17.4 安卓全局虚拟定位APP
e行最新版11.17.4 支持全局虚拟位置 小米手机 百度地图 高德地图 实测成功 其他app自测 不一定支持所有app 下载:https://www.123pan.com/s/HAf9-tsyCh.html...
vue项目通过点击文字上传html文件,查看html文件
上传html文件 解决思路:新建一个上传组件,将它挪到页面之外。当点击文字时,手动触发上传组件,打开上传文件框。 <template><BasicTable register"registerTable"><template #bodyCell"{ column, …...
【WEEK12】 【DAY1】整合JDBC【中文版】
2024.5.13 Monday 目录 11.整合JDBC11.1.SpringData简介11.2.新建springboot-04-data项目11.3.新建application.yaml11.4.连接数据库11.5.修改Springboot04DataApplicationTests.java11.5.1.查看DataSourceProperties.java和DataSourceAutoConfiguration.java 11.6.JDBCTempla…...
23种设计模式(软考中级 软件设计师)
设计模式 23个设计模式,23个意图 1. 设计模式概要 设计模式的核心在于提供了相关问题的解决方案,使得人们可以更加简单方便的复用成功的设计和体系结构 设计模式的类别 创建型结构型行为型类工厂方法模式适配器模式(类)解释器模…...
记录一下 log4j的漏洞
目录 背景 bug的产生 bug复现 JNDI 网络安全学习路线 (2024最新整理) 学习资料的推荐 1.视频教程 2.SRC技术文档&PDF书籍 3.大厂面试题 特别声明: 背景 log4j这次的bug,我相信大家都已经知道了,仅以…...
Springboot-配置文件中敏感信息的加密:三种加密保护方法比较
一. 背景 当我们将项目部署到服务器上时,一般会在jar包的同级目录下加上application.yml配置文件,这样可以在不重新换包的情况下修改配置。 一般会将数据库连接、Redis连接等放到配置文件中。 例如配置数据库连接: spring:servlet:multip…...
linux 性能监控命令之dstat
1. dstat 系统默认为安装,直接安装阿里源后,yum install -y dstat安装即可,该命令整合了 vmstat , iostat 和 ifstat,我们先看下效果: 我们先看看具体参数: [rootk8s-master ~]# dstat --help …...
花趣短视频源码淘宝客系统全开源版带直播带货带自营商城流量主小游戏功能介绍
1、首页仿抖音短视频 ,关注 ,我的 本地 直播 可发布短视频 可录制上传 2、商城页面 广告位、淘口令识别、微信登录、淘宝登录、淘宝返佣、拼多多返佣、京东返佣、唯品会返佣、热销榜、聚划算、天猫超市、9.9包邮、品牌特卖、新人攻略 、小米有品、优惠加…...
Python金融数据引擎:重构通达信数据获取的技术范式
Python金融数据引擎:重构通达信数据获取的技术范式 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 在量化投资和金融数据分析领域,数据获取一直是开发者面临的首要挑战。传…...
C++智能指针与内存管理实践
C智能指针与内存管理实践智能指针是C中自动管理动态内存的关键工具。通过RAII机制,智能指针在对象生命周期结束时自动释放内存,避免内存泄漏和悬空指针问题。std::unique_ptr提供独占所有权语义,确保同一时刻只有一个指针拥有资源。它的开销极…...
如何快速掌握猫抓工具:终极视频嗅探与下载指南
如何快速掌握猫抓工具:终极视频嗅探与下载指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为网页上的精彩视频无法保存而烦恼吗…...
告别臃肿!G-Helper:华硕笔记本用户的终极轻量级控制神器
告别臃肿!G-Helper:华硕笔记本用户的终极轻量级控制神器 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook…...
魔改frida-server实现反检测:从行为消除到可检测性归零
1. 为什么魔改frida-server比写检测绕过代码更根本?在Android逆向与安全测试一线干了十多年,我见过太多团队把精力耗在“检测逻辑对抗”上:写一堆Java层的isFridaPresent()、Native层的checkFridaPort()、甚至用ptrace自检父进程——结果呢&a…...
Chrome无痕模式下Selenium BiDi协议断连原因与解决方案
1. 这个问题不是“能不能用”,而是“为什么一开无痕就断连”我第一次在CI流水线里跑通Chrome DevTools Protocol(CDP)自动化时,兴奋地加了--incognito参数想让测试更干净——结果WebDriver直接抛出org.openqa.selenium.devtools.D…...
RK3562核心板在工业物联网与边缘AI中的实战应用解析
1. 项目概述:为什么RK3562核心板值得关注?最近在为一个工业网关项目选型,市面上主流的ARM核心板看了个遍,从全志到瑞芯微,从低功耗到高性能。当拿到迅为电子这款基于RK3562的核心板规格书时,我的第一反应是…...
GEO优化的两大误区:你是在“交学费”还是在“抢红利”?
当AI搜索成为用户的新入口,一批先行者已经吃到了红利。但更多人,还在两个极端之间摇摆。 你有没有遇到过这样的情况? 刷到某个同行,因为上了DeepSeek或豆包的推荐,咨询量翻了几倍。你也心动,开始研究GEO&a…...
为什么你的ElevenLabs马来文输出总像“机器人朗读”?资深语音架构师拆解4层韵律建模断层与3个修复级prompt模板
更多请点击: https://intelliparadigm.com 第一章:为什么你的ElevenLabs马来文输出总像“机器人朗读”?资深语音架构师拆解4层韵律建模断层与3个修复级prompt模板 马来语(Bahasa Melayu)虽属声调中性语言,…...
深度学习工程化实战:从论文思想到可部署代码的七步法
1. 项目概述:这不是一份“论文清单”,而是一份深度学习演进的实操路线图你有没有过这种感觉:打开一篇讲“深度学习里程碑论文”的文章,满屏都是《AlexNet》《ResNet》《Transformer》这些名字,配着几句“开创性”“革命…...
