LeetCode--256. 粉刷房子(动态规划)
粉刷房子(动态规划)
- 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. 粉刷房子(动态规划)相关推荐
- LeetCode 256. 粉刷房子(DP)
文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成红色.蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其与相邻的两个房子颜色不能相同. 当然,因 ...
- Leetcode 256.粉刷房子
Time: 20190903 Type: Easy 题目描述 假如有一排房子,共 n 个,每个房子可以被粉刷成红色.蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相 ...
- LeetCode 265. 粉刷房子 II(DP)
文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成 k 种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同. 当然,因为市场上不同颜色油 ...
- leetcode 1473. 粉刷房子 III(dp)
在一个小城市里,有 m 个房子排成一排,你需要给每个房子涂上 n 种颜色之一(颜色编号为 1 到 n ).有的房子去年夏天已经涂过颜色了,所以这些房子不需要被重新涂色. 我们将连续相同颜色尽可能多的房 ...
- LeetCode--265. 粉刷房子Ⅱ(动态规划)
粉刷房子Ⅱ(动态规划) 1. 题目描述 2. 题目分析 3. C语言实现 1. 题目描述 难度:困难 2. 题目分析 这道题目是256. 粉刷房子的进阶题,其实解题思路和256题是一样的: 动态规划 ...
- Leetcode学习笔记(粉刷房子)
091. 粉刷房子 用矩阵spend记录下来当前的最小花费,spend[i][1]表示第i个房子涂成蓝色时共支出的最小花费 class Solution:def minCost(self, costs ...
- LeetCode刷题笔记-动态规划-day4
文章目录 LeetCode刷题笔记-动态规划-day4 55. 跳跃游戏 1.题目 2.解题思路 3.代码 45. 跳跃游戏 II 1.题目 2.解题思路 3.代码 LeetCode刷题笔记-动态规划 ...
- 【每日一题 6.25】粉刷房子
开始之前先给自己打个鸡血吧: A journey of a thousand miles begins with a single step. 千里之行始于足下. 题源:https://leetcod ...
- [leetcode] 题型整理之动态规划
动态规划属于技巧性比较强的题目,如果看到过原题的话,对解题很有帮助 55. Jump Game Given an array of non-negative integers, you are ini ...
最新文章
- 2021年大数据常用语言Scala(十四):基础语法学习 数组 重点掌握
- C++ 最大公约数排序
- 如何配置网络地址转换(NAT)—Vecloud微云
- 2014多校第一场A题 || HDU 4861 Couple doubi
- 博客创办目的——————欢迎相互学习
- Tuxedo学习门户网站
- ue4 gpu构建_待在家里吗 为什么不构建GPU Box!
- 学生命科学要学计算机吗,现在学生物学出路真的有那么不济吗?
- php写入rabbit速度,RabbitMQ 入门教程(PHP) 实现延迟功能
- Python案例:输出公元后到目前为止全部回文日期
- 大数据之hive分区表和分桶表的区别
- c++ vector排序_儿童时间管理课6:便利贴时间排序法
- Galera Cluster:一种新型的高一致性MySQL集群架构
- pyecharts绘制条形图、饼图、散点图、词云图、地图等常用图形
- java借助Acrobat实现pdf转word
- C语言解一元二次方程
- C++程序设计_图书管理系统的控制台实现
- 7种方法实现数组去重
- asp行驶证识别,驾驶证识别api代码demo示例,还可以识别车牌
- JAVA:实现binary exponentiation二进制幂运算算法(附完整源码)
热门文章
- 消息中间件kafka与activeMQ、rabbitMQ、zeroMQ、rocketMQ的比较
- DenseNet论文笔记
- Android自定义滑动进度条,Android自定义View实现圆形水波进度条
- java 所有路径算法_经典算法题:二叉树的所有路径
- python多进程存储数据_python – 多进程还是多线程? – 并行化数百万次迭代的简单计算并将结果存储在单个数据结构中...
- SpringBoot-Mail 发邮件(单发、群发、加附件、HTML格式)
- 关于HashSet类对象使用迭代器无法进行增删操作的问题
- Websocket实现前后台通信,demo小测试
- JMeter(十三)-代理服务器录制脚本
- 微信支付官方SDK V3 .NET版的坑