【图解 LeetCode 房屋染色 动态规划思想 + 代码实现】

news2024/9/25 15:23:14

LeetCode 房屋染色 动态规划

问题描述:

假如有一排房子,共 n 个,每个房子可以被粉刷成 k 种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。
当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个 n*k 的矩阵来表示的。
例如,costs[0][0] 表示第 0 号房子粉刷成 0 号颜色的成本花费;costs[1][2] 表示第 1 号房子粉刷成 2 号颜色的成本花费,以此类推。请你计算出粉刷完所有房子最少的花费成本。
注意:
所有花费均为正整数。

输入输出示例:

输入: [[1,5,3],[2,9,4]]
输出: 5
解释: 将 0 号房子粉刷成 0 号颜色,1 号房子粉刷成 2 号颜色。最少花费: 1 + 4 = 5;
或者将 0 号房子粉刷成 2 号颜色,1 号房子粉刷成 0 号颜色。最少花费: 3 + 2 = 5.

图解思路

令dp[i][j]表示为第i- 1号房子染第j号颜色时的最小费用。

image-20231025095052433

代码实现

public class Solution {
    /**
     * @param costs: n x k cost matrix
     * @return: an integer, the minimum cost to paint all houses
     */
    public int minCostII(int[][] costs) {
        int n = costs.length;
        if(n == 0)
            return 0;
        int k = costs[0].length;
        if(k == 0)
            return 0;
        
        //数组定义:dp[i][j] 表示的是 0 -> i - 1号房刷j种颜色的最小花费
        int dp[][] = new int[n + 1][k];
        int ans = Integer.MAX_VALUE;
        
        /**
        当且仅当最小值下标不等于j时,
        状态方程 dp[i][j] = min(dp[i - 1][0..k-1]) + cost[i - 1][j]
        **/
        
        for(int i = 1; i <= n; i++) {
            int firMin = Integer.MAX_VALUE, secMin = Integer.MAX_VALUE;
            int firIdx = 0, secIdx = 0;
            
            //寻找最小值和次小值以及他们的下标
            for(int j = 0; j < k; j++) {
                if(dp[i - 1][j] < firMin) {
                    secMin = firMin;
                    secIdx = firIdx;
                    firMin = dp[i - 1][j];
                    firIdx = j;
                } else if(dp[i - 1][j] < secMin) {
                    secMin = dp[i - 1][j];
                    secIdx = j;
                }
            }
            
            for(int j = 0; j < k; j++) {
            	//因为相邻房屋不能涂相同颜色,所以当j等于最小值下标时要选择次小值
                if(j != firIdx) {
                    dp[i][j] = firMin + costs[i - 1][j];
                } else {
                    dp[i][j] = secMin + costs[i - 1][j];
                }
            }
        }
        
        for(int i = 0; i < k; i++) {
            ans = Math.min(ans, dp[costs.length][i]);
        }
        
        return ans;
    }
}

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

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

相关文章

视频特效制作软件 After Effects 2024 mac中文版新增功能

After Effects 2024 mac是一款专业的视频特效和动态图形设计软件&#xff0c;它可以帮助用户创建各种令人惊叹的视觉效果&#xff0c;例如粒子系统、合成特效、绿屏抠像等。AE2024软件支持动画制作&#xff0c;包括关键帧动画、形状动画、运动跟踪等工具&#xff0c;可以创建复…

IBM展示非冯·诺依曼架构AI芯片NorthPole

我们正处于人工智能的“寒武纪大爆发”时期。在过去的十年中&#xff0c;人工智能已经从理论和小型测试发展到企业规模的使用案例。但是&#xff0c;用于运行人工智能系统的硬件虽然越来越强大&#xff0c;但在设计时却没有考虑到当今的人工智能。随着人工智能系统规模的扩大&a…

使用C# RDLC环境搭建

搭建C# RDLC环境 在vs环境中&#xff0c;菜单扩展>管理扩展 用来打开报表文件的 用来新建报表文件的 搜索Microsoft Reporting Services Projects 选择第一个进行下载 安装完以上两个即可进行报表文件的创建和预览 reportview组件 推荐nuget安装&#xff1a;Install-…

RabbitMQ 笔记

一、win10安装erlang 1.1 安装erLang语言&#xff0c;配置环境变量 erLang官网地址 1.2 配置环境变量 &#xff08;1&#xff09;添加系统变量ERLANG_HOME &#xff08;2&#xff09;path路径&#xff0c;指向bin目录 1.3 配置完成后再cmd命令窗口erl -version可以查看…

ubuntu安装golang

看版本&#xff1a;https://go.dev/dl/ 下载&#xff1a; wget https://go.dev/dl/go1.21.3.linux-amd64.tar.gz卸载已有的go&#xff0c;可以apt remove go&#xff0c;也可以which go之后删除那个go文件&#xff0c;然后&#xff1a; rm -rf /usr/local/go && tar…

苹果手机怎么设置壁纸?解锁设置壁纸的2种方法!

手机壁纸便是我们常说的屏幕背景图&#xff0c;一张好看的手机壁纸能使我们的心情变得愉悦。这个壁纸可以是风景、美食、喜欢的偶像、自己养的宠物&#xff0c;或者是你的家人、朋友。 拥有特殊含义的照片会更让人想要设置成壁纸。苹果手机怎么设置壁纸&#xff1f;本文将给大…

18.1 Socket 原生套接字抓包

原生套接字抓包的实现原理依赖于Windows系统中提供的ioctlsocket函数&#xff0c;该函数可将指定的网卡设置为混杂模式&#xff0c;网卡混杂模式&#xff08;Promiscuous Mode&#xff09;是常用于计算机网络抓包的一种模式&#xff0c;也称为监听模式。在混杂模式下&#xff0…

从github下载文件时遇到报错(Unable to render code block)解决办法

1、报错情况 2、解决办法 https://ghproxy.com/ &#xff08;GitHub 文件 , Releases , archive , gist , raw.githubusercontent.com 文件代理加速下载服务&#xff09;

提高生产力,开启高效办公——ConceptDraw Office办公软件套件

在当今快节奏的工作环境中&#xff0c;一款强大的办公软件套件对于提高工作效率和生产力至关重要。ConceptDraw Office&#xff0c;作为一款专业的办公软件套件&#xff0c;凭借其强大的功能和易用性&#xff0c;成为了市场上备受瞩目的办公利器。本文将带您深入了解ConceptDra…

Qt扫盲-QPixmap理论总结

QPixmap 理论总结 一、概述二、读写 Image 文件三、Pixmap 像素图信息四、Pixmap 格式转换五、Pixmap 像素转换 一、概述 QPixmap 也是一个用得很多的描述图像的类&#xff0c;也是界面显示相关的时候用得很多的。 QPixmap类是一个可以用作绘画设备的屏幕外图像表示。Qt提供了…

文生图——DALL-E 3 —论文解读——第一版

概述 本文主要是DALLE 3官方第一版技术报告&#xff08;论文&#xff09;的解读&#xff0c;原文《Improving Image Generation with Better Captions》论文解读。该文要提升文生图的效果&#xff0c;将技术点放到了&#xff0c;提升指令跟随能力上&#xff0c;然后顺藤摸瓜分为…

Linux下挂载大于2T的硬盘

fdisk和gdisk命令的区别 fdisk和gdisk命令都可以给磁盘分区&#xff0c;但是在公司里&#xff0c;如果磁盘大于2T&#xff0c;不能用fdisk分区&#xff0c;只能用gdisk命令分区。 gdisk可以分128个主分区&#xff0c;用gdisk分区没有逻辑分区和扩展分区之说&#xff0c;只有主…

【FPGA零基础学习之旅#17】搭建串口收发与储存双口RAM系统

&#x1f389;欢迎来到FPGA专栏~搭建串口收发与储存双口RAM系统 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;FPGA学习之旅 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0…

超声波清洗机品牌哪些好用?好评不断的超声波清洗机推荐

超声波清洗机目前的使用范围逐渐变广&#xff0c;一开始超声波清洗机只出现在大型的工业领域中的零件清洗&#xff0c;逐渐衍生到现在&#xff0c;出现了小型的超声波清洗机&#xff0c;可以让大家可以在家也使用上超声波清洗机。眼镜是现在大部分都离不开视线辅助的一个工具&a…

越流行的大语言模型越不安全

源自&#xff1a;GoUpSec “人工智能技术与咨询” 发布 安全研究人员用OpenSSF记分卡对GitHub上50个最流行的生成式AI大语言模型项目的安全性进行了评估&#xff0c;结果发现越流行的大语言模型越危险。 近日&#xff0c;安全研究人员用OpenSSF记分卡对GitHub上50个最流…

Powershell脚本自动备份dhcp数据库

文章目录 为什么要备份DHCP数据库呢&#xff1f;在PowerShell中自动备份DHCP数据库1&#xff0c;创建备份目录2&#xff0c;判断备份路径是否存在3&#xff0c;备份DHCP数据库4&#xff0c;完整自动备份脚本5&#xff0c;安排定期备份 推荐阅读 为什么要备份DHCP数据库呢&#…

故障解析丨Clone节点导致主从故障

1.背景概述 在一次主从复制架构中&#xff0c;由于主节点binlog损坏&#xff0c;导致从节点无法正常同步数据&#xff0c;只能重做从节点&#xff1b;因此使用MySQL 8.0.17开始提供的clone技术进行恢复&#xff0c;恢复后的2天都发生了主从报错数据冲突。 通过解析binlog发现…

网页轮播图

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>纯CSS实现轮播图(自动轮播)</title><style&…

Warning: ‘Destination Folder‘ contains 1 space.【Anaconda安装】

报错内容如下&#xff1a; 意思就是说你的安装路径下不要有空格哈哈&#xff0c;有空格就不行&#xff0c;比如&#xff1a; "D:\Program Files\Anaconda3"中间就有空格&#xff0c;Program与Files之间。 换个路径&#xff0c;例如&#xff1a; 就可以了。

EmbedChain:比LangChain更加轻量化的LLM框架

一、前言 在之前的文章中&#xff0c;我们研究了如何使用LangChain结合大型语言模型&#xff08;LLM&#xff09;API来构建用户友好且直观的聊天机器人。现在&#xff0c;我们将探索一个新的Python包来进一步简化LangChain的实现。只需3-4行代码&#xff0c;我们就可以轻松地与…