LeetCode--256. 粉刷房子(动态规划)_爱吃骨头的猫、的博客-程序员秘密

技术标签: •LeetCode  

粉刷房子(动态规划)

1. 题目描述

难度:简单
在这里插入图片描述

2. 题目分析

这道题目是一道典型的动态规划问题,如果我们只把目光放在一个最少花费的身上,状态转化方程并不容易想出来,但是如果我们着眼于每一个颜色的最少花费,那么状态转化方程可以很容易地写成:

  • 初始态
red[0] = costs[0][0]
blue[0] = costs[0][0]
green[0] = costs[0][0]
  • 过程
red[i] = Min(blue[i-1], green[i-1]) + costs[i][0]
blue[i] = Min(red[i-1], green[i-1]) + costs[i][1]
green[i] = Min(red[i-1], blue[i-1]) + costs[i][2]
  • 结果:
result = Min(red[n-1], blue[n-1], green[n-1])

时间复杂度为O(n).

3. C语言实现

代码如下:

int Min(int a, int b){
    
    return a<b?a:b;
}
int minCost(int** costs, int costsSize, int* costsColSize){
    
    int n = costsSize;
    if(n == 0) return 0;
    int res;
    // 申请三个内存空间用来存放每个颜色的最小花费
    int* red = (int *)malloc(sizeof(int)*n);
    int* blue = (int *)malloc(sizeof(int)*n);
    int* green = (int *)malloc(sizeof(int)*n);
    // 初始化
    red[0] = costs[0][0];
    blue[0] = costs[0][1];
    green[0] = costs[0][2];
    for(int i = 1; i < n; i++){
    
        red[i] = Min(blue[i-1], green[i-1]) + costs[i][0];
        blue[i] = Min(red[i-1], green[i-1]) + costs[i][1];
        green[i] = Min(red[i-1], blue[i-1]) + costs[i][2];
    }
    res = Min(Min(red[n-1], blue[n-1]), green[n-1]);
    // 释放数组内存空间
    free(red);
    free(green);
    free(blue);
    return res;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42580947/article/details/105281598

智能推荐

Qt中的qreal关键字说明_qt qreal_TandL520的博客-程序员秘密

在QT的手册中找到的关于qreal关键字的解释:typedef qrealTypedef for double unless Qt is configured with the-qreal float option.翻译过来是,除非用户自己配置qreal为float,否则qreal将默认为double。

二级导航--鼠标悬浮菜单出现二级菜单_飞翔的熊blabla的博客-程序员秘密

二级导航–鼠标悬浮菜单出现二级菜单&amp;lt;!DOCTYPE html&amp;gt;&amp;lt;html&amp;gt;&amp;lt;head &amp;gt;&amp;lt;meta charset=&quot;utf-8&quot;&amp;gt;&amp;lt;title&amp;gt;鼠标悬浮菜单出现二级菜单&amp;lt;/title &amp;gt;&amp;lt;style&amp;gt; a{ color: #fff; text-dec

mybatis中order by排序无效问题_thankful_chn的博客-程序员秘密

mybatis中 $,# 的区别,在order by时转义导致无效

[LiteratureReview]ORB-SLAM2: an Open-Source SLAM System for Monocular, Stereo and RGB-D Cameras_local ba和full ba_GRF-Sunomikp31的博客-程序员秘密

[LiteratureReview]ORB-SLAM2: an Open-Source SLAM System for Monocular, Stereo and RGB-D Cameras出处:2017 IEEE Transactions on Robotics,(截止到2022-3-28)Google论文被引3500+;说明:ORB-SLAM2是基于ORB-SLAM[1]的工作,所以论文中对单目方法做了较少的描述,而对新添加的双目和RGB-D方法做了较多描述。Introduction完整SLA

Android 使用MD5密码加密_l6666_6666的博客-程序员秘密

在工程目录下先创建一个MD5类可以直接复制以下代码 //此处导入你的包名import java.security.MessageDigest; import java.security.NoSuchAlgorithmException;public class MD5Utils {public static String md5Password(String password)...

关于byte最高位为1时,为负数__Vanm的博客-程序员秘密

在剖析该问题前请看如下代码public static String bytes2HexString(byte[] b) {String ret = "";for (int i = 0; i String hex = Integer.toHexString(b[ i ] & 0xFF);if (hex.length() == 1) {hex = '0' + hex;}

随便推点

windows2000虚拟主机安全设置_cui55的博客-程序员秘密

首先所有盘取消EVERYONE完全控制权限取消方法点击盘符,右键---属性----安全---会看到允许访问该盘的用户组权限,默认的是EVERYONE完全控制,添加ADMINISTRATORS[管理员组],和SYSTEM然后将EVERYONE删除。有几个文件夹要特殊注意Program Files/Common Files  该文件夹要允许UESR组有读取,运行和列出文件夹三个权限WINNT/syst

Maven分模块开发_grass-rui的博客-程序员秘密

1.为什么分模块开发​ (1)随着业务的增加, mapper 或者 service类 越来越多 ,项目越来越庞大,项目有点臃肿 --&gt;拆分多个模块​ (2)项目代码越来越多, 构建 或者编译, 变得很慢很慢 --&gt;拆分​ (3)有些内容,公共的内容 ,有很多项目都可能使用,有必要-- 抽取到公共maven模块​ (4)有些内容, 不想让每个人都可以修改 – 抽...

Unity3D 之 学习路线与学习经验分享_24151.org_kevin_org的博客-程序员秘密

转自:https://blog.csdn.net/qq_22521529/article/details/83108837Unity3D学习路线与学习经验分享该博文出自作者15游02 丁祺,是一篇非常全面的Unity3D学习路线。作者通过不同切入点与角度,并根据以上人群的不同技术程度,由浅入深,分享了他的学习及工作经验。下面让我们进入主题吧。写给新手与初学者:你在准本开始学习这款软件之前,...

【Java】自定义注解(一),类中属性注解_createcontextual_优秀的不二君的博客-程序员秘密

这里写自定义目录标题前言基础业务场景描述功能实现开始一、自定义注解:@DoubleFormat二、自定义json序列化解析三、Controller测试业务扩展扩展业务场景描述改造注解改造解析器插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你...

IDEA配置springboot项目使用Jrebel+Mybatis-plus进行热部署_糖醋排骨炒洋葱的博客-程序员秘密

IDEA下载Jrebel插件并激活激活地址为:http://jrebel.qekang.com/GUIDGUID生成地址:https://www.guidgen.com/然后随便填写一个自己的邮箱下图表示激活成功选择需要进行热部署的项目以jrebel方式启动,如下图所示表示配置成功修改代码之后会出现如下图所示,并不用手动重启以上就是j...

Java 函数式编程案例(函数式接口作为参数和返回值)_夏沐_lk的博客-程序员秘密

1. 原日志代码public class Demo01Logger { //只有日志等级为1时,才会打印日志信息 public static void showLog(int level, String massage){ if(level==1){ System.out.println(massage); } ...

推荐文章

热门文章

相关标签