粉刷房子问题:从DP基础到空间极致优化学习笔记
粉刷房子问题从DP基础到空间极致优化学习笔记一、问题回顾有n个房子排成一排每个房子可刷红、蓝、绿三种颜色相邻房子颜色不能相同。给定每个房子刷对应颜色的成本矩阵costs[n][3]求粉刷所有房子的最小总成本。约束核心相邻颜色不同目标全局成本最小。这类递推约束最优解结构天然适合动态规划求解。二、常规动态规划思路1. 标准状态定义最直观的方式是定义二维 DP 数组dp[i][0]第i个房子刷红色时前i个房子的最小成本dp[i][1]第i个房子刷蓝色时前i个房子的最小成本dp[i][2]第i个房子刷绿色时前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[0][0] costs[0][0], dp[0][1] costs[0][1], dp[0][2] costs[0][2]结果min(dp[n-1][0], dp[n-1][1], dp[n-1][2])此时时间复杂度O(n)空间复杂度O(n)逻辑清晰但空间存在优化空间。三、空间优化从O(n)到O(1)观察状态转移可以发现计算第i个房子的状态只依赖第i-1个房子的状态与更早历史无关。因此不需要保存完整n×3数组只需要保存上一轮三个颜色的累计成本即可。优化后状态表示用三个变量滚动更新prev_red、prev_blue、prev_green上一个房子对应颜色的最小累计成本curr_red、curr_blue、curr_green当前房子对应颜色的最小累计成本转移逻辑不变只是每次用新值覆盖旧值遍历结束后取三者最小值。优化后时间复杂度O(n)不变空间复杂度O(1)仅常数变量无额外动态数组在数据规模较大、内存敏感的场景中这种滚动更新的写法更贴近实际工程实现。四、实现细节与工程思考边界处理当房子数量n 0时直接返回 0避免数组越界这是代码鲁棒性的基础。临时变量的必要性更新当前颜色成本时必须先保存上一轮的三个值再统一计算新值。如果直接覆盖会导致后续计算使用已被修改的错误值。常数级优化的意义本题颜色固定为 3 种状态数极少滚动变量的写法不仅节省空间也更利于编译器做寄存器优化在高频调用、长序列场景下实际运行效率更稳定。可扩展性思考如果颜色种类从 3 种扩展到k种思路依然成立滚动维护k个状态每次取非自身的k-1个历史状态最小值累加时间复杂度变为O(n·k)空间仍为O(k)依旧是较优的解法。五、最终实现CclassSolution{public:intminCost(vectorvectorintcosts){intncosts.size();if(n0)return0;intredcosts[0][0];intbluecosts[0][1];intgreencosts[0][2];for(inti1;in;i){intpre_rred;intpre_bblue;intpre_ggreen;redmin(pre_b,pre_g)costs[i][0];bluemin(pre_r,pre_g)costs[i][1];greenmin(pre_r,pre_b)costs[i][2];}returnmin({red,blue,green});}};六、小结粉刷房子是非常典型的线性递推有限状态动态规划问题。从二维 DP 到滚动变量本质是只保留对后续有用的历史信息剔除冗余存储。这种思想在很多空间受限的算法与工程实现中都非常常见既保证了最优子结构的利用又在空间与效率上达到了平衡。

相关新闻

2026毕业季降AI工具实测推荐:这两款帮我论文一次过检

2026毕业季降AI工具实测推荐:这两款帮我论文一次过检

2026毕业季降AI工具实测推荐:这两款帮我论文一次过检 上个月刚答辩完,学位证拿到手了,回头看整个毕业季最让我心惊肉跳的不是答辩本身,是AIGC检测。 事情是这样的。我写论文的时候用了DeepSeek帮忙整理文献综述,用Clau…

2026/5/17 4:56:23 阅读更多 →
亲测好用 9个降AIGC软件测评:专科生降AI率必备工具推荐

亲测好用 9个降AIGC软件测评:专科生降AI率必备工具推荐

在当前高校论文评审中,AIGC率的控制已成为许多学生不得不面对的问题。尤其是专科生群体,在写作经验与学术规范上相对薄弱,更容易因AI生成内容而被系统判定为高重复率或存在AI痕迹。这时候,一款高效、专业的AI降重工具就显得尤为重…

2026/7/5 16:23:02 阅读更多 →
少走弯路:9个AI论文平台测评!MBA毕业论文写作必备工具推荐

少走弯路:9个AI论文平台测评!MBA毕业论文写作必备工具推荐

在当前学术研究日益数字化的背景下,MBA学员在撰写毕业论文时面临诸多挑战:从选题构思到文献综述,从逻辑梳理到格式规范,每一步都可能成为阻碍进度的“拦路虎”。尤其是在AI技术快速发展的今天,如何选择一款真正能提升效…

2026/7/4 22:49:20 阅读更多 →

最新新闻

Instatic插件权限审计:安全合规检查完全指南

Instatic插件权限审计:安全合规检查完全指南

Instatic插件权限审计:安全合规检查完全指南 【免费下载链接】Instatic Instatic is a modern self-hosted visual CMS - get it running in 1 minute 项目地址: https://gitcode.com/GitHub_Trending/in/Instatic Instatic作为现代化的自托管可视化CMS&…

2026/7/6 19:35:01 阅读更多 →
nest_asyncio 性能优化指南:如何避免嵌套事件循环的性能陷阱

nest_asyncio 性能优化指南:如何避免嵌套事件循环的性能陷阱

nest_asyncio 性能优化指南:如何避免嵌套事件循环的性能陷阱 【免费下载链接】nest_asyncio Patch asyncio to allow nested event loops 项目地址: https://gitcode.com/gh_mirrors/ne/nest_asyncio 在Python异步编程的世界中,nest_asyncio是一个…

2026/7/6 19:29:00 阅读更多 →
Hermes Agent完整实战指南:AI代理系统的深度配置与应用

Hermes Agent完整实战指南:AI代理系统的深度配置与应用

Hermes Agent完整实战指南:AI代理系统的深度配置与应用 【免费下载链接】hermes-agent The agent that grows with you 项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent Hermes Agent是一款功能强大的AI代理系统,它能够随着用户需…

2026/7/6 19:26:59 阅读更多 →
ReForum:构建现代化React-Redux论坛应用的终极指南

ReForum:构建现代化React-Redux论坛应用的终极指南

ReForum:构建现代化React-Redux论坛应用的终极指南 【免费下载链接】ReForum A minimal forum board application. Built on top of React-Redux frontend, ExpressJS-NodeJS backend (with PassportJS for OAuth) and MongoDB databse. 项目地址: https://gitcod…

2026/7/6 19:26:59 阅读更多 →
ReForum深度解析:React-Redux与ExpressJS的完美融合架构

ReForum深度解析:React-Redux与ExpressJS的完美融合架构

ReForum深度解析:React-Redux与ExpressJS的完美融合架构 【免费下载链接】ReForum A minimal forum board application. Built on top of React-Redux frontend, ExpressJS-NodeJS backend (with PassportJS for OAuth) and MongoDB databse. 项目地址: https://g…

2026/7/6 19:20:56 阅读更多 →
Discordia迭代器系统:Cache、WeakCache与FilteredIterable深度解析

Discordia迭代器系统:Cache、WeakCache与FilteredIterable深度解析

Discordia迭代器系统:Cache、WeakCache与FilteredIterable深度解析 【免费下载链接】Discordia Discord API library written in Lua for the Luvit runtime environment 项目地址: https://gitcode.com/gh_mirrors/di/Discordia Discordia是基于Luvit运行环…

2026/7/6 19:20:56 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻