【学会动态规划】剑指 Offer II 091. 粉刷房子(14)

news2025/1/16 4:58:54

目录

动态规划怎么学?

1. 题目解析

2. 算法原理

1. 状态表示

2. 状态转移方程

3. 初始化

4. 填表顺序

5. 返回值

3. 代码编写

写在最后:


动态规划怎么学?

学习一个算法没有捷径,更何况是学习动态规划,

跟我一起刷动态规划算法题,一起学会动态规划!

1. 题目解析

题目链接:剑指 Offer II 091. 粉刷房子 - 力扣(Leetcode)

 这道题看起来挺复杂,其实题目很好理解,

我们来看第一个示例:

这里一共有三个子数组,代表的是三栋相邻的房子,

上面的数字就是刷不同颜色需要的花费金钱,

而题目要我们求的就是刷完所有房子最低的花费,

然后这里有一个条件限制,就是相邻的两个房子刷的颜色不能相同。 

2. 算法原理

1. 状态表示

根据题目,我们可以得出三个状态表示:

dp[ i ][ 0 ] 表示粉刷到 i 位置的时候,最后一个位置刷上红色,此时的最小花费

dp[ i ][ 1 ] 表示粉刷到 i 位置的时候,最后一个位置刷上蓝色,此时的最小花费

dp[ i ][ 2 ] 表示粉刷到 i 位置的时候,最后一个位置刷上绿色,此时的最小花费

2. 状态转移方程

所以,状态转移方程也是由这三种情况得来的:

最后一个房子选红色,他的最小花费就是上一个房子选蓝色和绿色花费的最小值+当前房子的花费

其他的同理:

dp[ i ][ 0 ] = min( dp[ i - 1 ][ 1 ],dp[ i - 1 ][ 2 ] ) + costs[ i ][ 0 ]

dp[ i ][ 1 ] = min( dp[ i - 1 ][ 0 ],dp[ i - 1 ][ 2 ] ) + costs[ i ][ 1 ]

dp[ i ][ 2 ] = min( dp[ i - 1 ][ 0 ],dp[ i - 1 ][ 1 ] ) + costs[ i ][ 2 ]

3. 初始化

为了防止越界, 且不能让后面的值出错,

实际上填0就行了。

4. 填表顺序

从左往右,三个表同时填写

5. 返回值

返回:min( dp[ n ][ 0 ],min( dp[ n ][ 1 ],dp[ n ][ 2 ] ) )

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][0], dp[i - 1][1]) + costs[i - 1][2];
        }
        return min(dp[n][0], min(dp[n][1], dp[n][2]));
    }   
};

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/829931.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

arm交叉编译lmbench

一、下载lmbench www.bitmover.com/lmbench 官网下载&#xff0c;http://www.bitmover.com/lmbench/lmbench3.tar.gz 我没有下载下来&#xff0c;找的别人的百度云下载 链接: https://pan.baidu.com/s/1tGo1clCqY-jQPN8G1eWSsg 提取码: f6jd 二、修改makefile 修改三个文件…

CrossOver2023虚拟机下载及如何安装软件教程

在当今数字化时代&#xff0c;虚拟机技术被广泛应用于软件开发、系统测试、网络安全等领域。虚拟机提供了一个隔离的虚拟环境&#xff0c;使得我们能够在一台物理计算机上同时运行多个操作系统和应用程序。下面我们就来看虚拟机软件怎么安装&#xff0c;虚拟机怎么使用吧&#…

浅析:单板静态数据分析功能在足底压力步态测量分析系统的应用

时代在不断进步&#xff0c;健康成为了现代人最重要的追求之一。而在我们繁忙的生活中&#xff0c;您是否关注过自己的足部健康&#xff1f;它不仅影响着我们的行走姿态、脊椎健康&#xff0c;还影响着我们的整体健康状态。 足底压力测量分析系统A30是一项采集人体足底压力的装…

【并发专题】单例模式的线程安全(进阶理解篇)

目录 背景前置知识类加载运行全过程 单例模式的实现方式一、饿汉式基本介绍源码分析 二、懒汉式基本介绍源码分析改进 三、懒汉式单例终极解决方案&#xff08;静态内部类&#xff09;&#xff08;推荐使用方案&#xff09;基本介绍源码分析 感谢 背景 最近学习了JVM之后&…

【HMS Core】位置服务逆地理编码请求错误问题

【关键字】 HMS、位置服务、逆地理编码 【问题描述】 有开发者反馈在集成位置服务-逆地理编码时&#xff0c;出现了请求报错的问题。 后端请求逆地理编码 错误 { "returnCode": "010010", "returnDesc": "INVALID_REQUEST" } 【问…

【雕爷学编程】Arduino动手做(181)---Maixduino AI开发板9

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

rest-apiV2.0.0升级为simplest-api开源框架生态之simplest-jpa发布

什么是 simplest simplest 追求存粹简单和极致。 旨在为项目快速开发提供一系列的基础能力&#xff0c;方便用户根据项目需求快速进行功能拓展 不在去关心一些繁琐。重复工作&#xff0c;而是把重点聚焦到业务。 前言 程序 10 年。作为一个多年程序。深知每个项目和程序&a…

最令跨境电商信服的六个电子商务营销策略

自从人们开始适应“新常态”以来&#xff0c;电子商务销售额一直在快速增长。进入智能手机和平板电脑时代&#xff0c;在线购物有望成为未来几年每个品牌的关键增长引擎。 数字零售格局的持续转型&#xff0c;您不得不考虑放弃一些利润较低的实体店&#xff0c;并进军电子商务&…

为什么说数字时代的品牌就是体验?

​ 在数字时代&#xff0c;品牌通常被称为“体验”&#xff0c;因为消费者现在以比以往更加动态和身临其境的方式与品牌互动。传统上&#xff0c;品牌主要侧重于创建独特的视觉形象并通过广告和其他营销渠道传达一致的信息。尽管这些方面仍然很重要&#xff0c;但数字环境已经…

应用案例|基于高精度3D视觉引导压缩机抓取定位应用

Part.1 行业现状 3D机器视觉是一种新兴的人工智能技术&#xff0c;它在机器视觉和机器学习领域中发挥着重要的作用。在工业领域&#xff0c;3D视觉技术被广泛应用于引导工业机器人进行抓取和定位操作。使用显扬科技的技术可以实现识别和定位压缩机。 Part.2 如何识别和定位压缩…

appium自动爬取数据

爬取类容&#xff1a;推荐知识点中所有的题目 爬取方式&#xff1a;appium模拟操作获取前端数据 入门级简单实现&#xff0c;针对题目和答案是文字内容的没有提取出来 适用场景;数据不多&#xff0c;参数加密&#xff0c;反爬严格等场景 from appium import webdriver impor…

小程序开发:开发框架与工具的使用指南

引言 本文以微信小程序为例介绍了小程序开发框架与工具的使用&#xff0c;通过本文的阅读&#xff0c;相信大家能够简单了解小程序开发的基本流程和常用工具&#xff0c;从而快速上手小程序开发。 文章目录 引言一、小程序开发框架与工具简介1.1 小程序开发框架1.2 小程序开发工…

百度文心大模型,彻底火了!丨IDCF

IDC报告显示&#xff0c;百度稳居中国深度学习平台市场综合份额第一。 根据中国信通院发布的《深度学习平台报告(2022)》&#xff0c;飞桨是中国深度学习市场应用规模第一的深度学习框架和赋能平台。通过飞桨与文心协同优化&#xff0c;文心大模型3.5&#xff0c;在14个参评模…

CSS 滚动条

一、滚动条样式属性 ::-webkit-scrollbar {width: 6px; /* 竖向滚动条宽度 */height: 6px; /* 横向滚动条高度 */ }::-webkit-scrollbar-thumb {border-radius: 10px; /* 滚动条样式 */-webkit-box-shadow: inset 0 0 3px red; /* 内阴影 */background-color: blue; /* 滚动条…

SpringBoot使用RestTemplate发送http请求(实操版)

前言 查看此文章前强烈建议先看这篇文章&#xff1a;Java江湖路 | 专栏目录 该文章纪录的是SpringBoot使用RestTemplate发送http请求&#xff0c;每一步都有记录&#xff0c;争取每一位看该文章的小伙伴都能操作成功。达到自己想要的效果~ 文章目录 前言1、SpringBoot调用外部…

RabbitMQ(二)

二、高级特性、应用问题以及集群搭建 高级特性 1.消息的可靠性投递 在使用RabbitMQ的时候&#xff0c;作为消息发送方希望杜绝任何消息丢失或者投递失败场景。RabbitMQ 为我们提供了两种方式用来控制消息的投递可靠性模式。 rabbitMQ整个消息投递的路径为&#xff1a; produ…

mysql-入门笔记-3

# ----------排序查询-------- # 语法 # select 字段列表 from 表名 order by 字段1 排序方式1 ,字段2 排序方式2 ; DESC 降序 ASC升序 # 1 根据年龄对公司的员工进行升序排序---默认升序-黄色提示代码冗余 select * from userTable order by age ASC ; # 2 根据入职时间,对员…

LPython:最新的高性能Python实现、速度极快且支持多后端

LPython 是最新的开源 Python 实现&#xff0c;目标是打造高性能版本的 Python。 LPython 官网写道&#xff0c;它一直作为 Python 编译器在开发&#xff0c;能够生成优化的机器代码。LPython 的后端支持 LLVM、C/C 翻译&#xff0c;甚至还支持 WebAssembly (WASM)。 LPython 主…

CGAL-几何对象基础判断-点线段使用-hello world

文章目录 1.概述2.点和线段3.点序列的凸包3.1.内置数组中点的凸包3.2.向量中点的凸包 4.关于kernel和Traits类5.概念和模型 1.概述 本教程是为CGAL新手&#xff0c;大概知道c和几何算法的基本知识。第一部分展示了如何定义点和段类&#xff0c;以及如何在它们上应用几何谓词。…

环球数科、BUFFALO面试(部分)

环球数科 系统复杂且需求迭代频繁&#xff0c;如何维护微服务之间的接口调用关系&#xff1f; API接口在设计的时候需要大量的需求文档&#xff0c;而且文档也需要不断维护。如何高效维护API文档就很重要了。以下是一些常见的API管理工具&#xff1a;Swagger&#xff1a;Swag…