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

动态规划-LCR 091.粉刷房子-力扣(LeetCode)

一、题目解析

根据题目信息,我们能知道0是红色,1是蓝色,2是绿色,由此我们就能分析如何粉刷了

二、算法原理

1、状态表示

由于只有一排房子所以此时dp[i]表示:到达i位置时,此时的最小花费,但我们发现有三种颜色要粉刷,所以我们需要多加一维表示粉刷的颜色。

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、初始化

由于要用到dp[i-1][0/1/2]所以可以直接初始化dp[0][0]dp[0][1]dp[0][2],也可以加三个虚拟节点赋值为0 用于初始化,但需要注意下标的映射关系。

4、填表顺序

从左往右,三个表一起填

5、返回值

由于只粉刷一排房子,所以刷到最后一个房子三个颜色中的最小值返回即可

min(dp[n][0],min(dp[n][1],dp[n][2]))

动手实现代码,才能未来助你一臂之力,链接:LCR 091. 粉刷房子 - 力扣(LeetCode)

 三、代码示例

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]));}
};

 

 

看到最后,如果对您有所帮助,还请点赞、收藏和关注,点点关注不迷路,我们下期再见!

相关文章:

  • Vim文本编辑器快捷键用法以及简单介绍
  • 【前端】PWA
  • 随机游动算法解决kSAT问题
  • JWT安全:接收无签名令牌.【签名算法设置为none绕过验证】
  • 理解 Vue 2 的响应式原理:数据劫持与依赖收集的背后
  • 文件服务端加密—minio配置https
  • .NET 9正式发布,亮点是.NET Aspire和AI
  • RabbitMQ监控:关键技术、技巧与最佳实践
  • Java从入门到精通 - 面向对象编程基础
  • 懒人云电脑方案:飞牛NAS远程唤醒 + 节点小宝一键唤醒、远程控制Windows!
  • 使用 Syncfusion 在 .NET 8 中生成 PDF/DOC/XLS/PPT
  • Oracle Linux 9 安装 EMCC 13.5:避坑细节与实战经验汇总!
  • 使用LSTM对销售数据进行预测
  • 基于RPA技术的ECRobot企业智能体解决方案,打通企业自动化业务流程的最后一公里
  • RabbitMQ 与其他 MQ 的对比分析:Kafka/RocketMQ 选型指南(二)
  • RabbitMQ 与其他 MQ 的对比分析:Kafka/RocketMQ 选型指南(一)
  • LVS-DR 负载均衡群集
  • 【系统架构设计师】2025年上半年真题论文回忆版: 论系统负载均衡设计方法(包括解题思路和参考素材)
  • 数据结构之队列实验
  • 数据分析与应用-----使用scikit-learn构建模型
  • 网站策划运营方案/百度指数查询工具app
  • 无锡网站建设上海韵茵/seo服务外包客服
  • 测速网站怎么做/专业软文平台
  • 网站开发毕业论文任务书/百度百科词条创建入口
  • 微信公众号微网站怎么做/google adwords
  • 前端做项目网站/杭州seo外包