粉刷房子(动态规划)

  • 1. 题目描述
  • 2. 题目分析
  • 3. C语言实现

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

LeetCode--256. 粉刷房子(动态规划)相关推荐

  1. LeetCode 256. 粉刷房子(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成红色.蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其与相邻的两个房子颜色不能相同. 当然,因 ...

  2. Leetcode 256.粉刷房子

    Time: 20190903 Type: Easy 题目描述 假如有一排房子,共 n 个,每个房子可以被粉刷成红色.蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相 ...

  3. LeetCode 265. 粉刷房子 II(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成 k 种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同. 当然,因为市场上不同颜色油 ...

  4. leetcode 1473. 粉刷房子 III(dp)

    在一个小城市里,有 m 个房子排成一排,你需要给每个房子涂上 n 种颜色之一(颜色编号为 1 到 n ).有的房子去年夏天已经涂过颜色了,所以这些房子不需要被重新涂色. 我们将连续相同颜色尽可能多的房 ...

  5. LeetCode--265. 粉刷房子Ⅱ(动态规划)

    粉刷房子Ⅱ(动态规划) 1. 题目描述 2. 题目分析 3. C语言实现 1. 题目描述 难度:困难 2. 题目分析 这道题目是256. 粉刷房子的进阶题,其实解题思路和256题是一样的: 动态规划 ...

  6. Leetcode学习笔记(粉刷房子)

    091. 粉刷房子 用矩阵spend记录下来当前的最小花费,spend[i][1]表示第i个房子涂成蓝色时共支出的最小花费 class Solution:def minCost(self, costs ...

  7. LeetCode刷题笔记-动态规划-day4

    文章目录 LeetCode刷题笔记-动态规划-day4 55. 跳跃游戏 1.题目 2.解题思路 3.代码 45. 跳跃游戏 II 1.题目 2.解题思路 3.代码 LeetCode刷题笔记-动态规划 ...

  8. 【每日一题 6.25】粉刷房子

    开始之前先给自己打个鸡血吧: A journey of a thousand miles begins with a single step. 千里之行始于足下. 题源:https://leetcod ...

  9. [leetcode] 题型整理之动态规划

    动态规划属于技巧性比较强的题目,如果看到过原题的话,对解题很有帮助 55. Jump Game Given an array of non-negative integers, you are ini ...

最新文章

  1. 2021年大数据常用语言Scala(十四):基础语法学习 数组  重点掌握
  2. C++ 最大公约数排序
  3. 如何配置网络地址转换(NAT)—Vecloud微云
  4. 2014多校第一场A题 || HDU 4861 Couple doubi
  5. 博客创办目的——————欢迎相互学习
  6. Tuxedo学习门户网站
  7. ue4 gpu构建_待在家里吗 为什么不构建GPU Box!
  8. 学生命科学要学计算机吗,现在学生物学出路真的有那么不济吗?
  9. php写入rabbit速度,RabbitMQ 入门教程(PHP) 实现延迟功能
  10. Python案例:输出公元后到目前为止全部回文日期
  11. 大数据之hive分区表和分桶表的区别
  12. c++ vector排序_儿童时间管理课6:便利贴时间排序法
  13. Galera Cluster:一种新型的高一致性MySQL集群架构
  14. pyecharts绘制条形图、饼图、散点图、词云图、地图等常用图形
  15. java借助Acrobat实现pdf转word
  16. C语言解一元二次方程
  17. C++程序设计_图书管理系统的控制台实现
  18. 7种方法实现数组去重
  19. asp行驶证识别,驾驶证识别api代码demo示例,还可以识别车牌
  20. JAVA:实现binary exponentiation二进制幂运算算法(附完整源码)

热门文章

  1. 消息中间件kafka与activeMQ、rabbitMQ、zeroMQ、rocketMQ的比较
  2. DenseNet论文笔记
  3. Android自定义滑动进度条,Android自定义View实现圆形水波进度条
  4. java 所有路径算法_经典算法题:二叉树的所有路径
  5. python多进程存储数据_python – 多进程还是多线程? – 并行化数百万次迭代的简单计算并将结果存储在单个数据结构中...
  6. SpringBoot-Mail 发邮件(单发、群发、加附件、HTML格式)
  7. 关于HashSet类对象使用迭代器无法进行增删操作的问题
  8. Websocket实现前后台通信,demo小测试
  9. JMeter(十三)-代理服务器录制脚本
  10. 微信支付官方SDK V3 .NET版的坑