LeetCode 256. 粉刷房子(DP)
文章目录
- 1. 题目
- 2. 解题
1. 题目
假如有一排房子,共 n 个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其与相邻的两个房子颜色不能相同。
当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个 n x 3 的矩阵来表示的。
例如,costs[0][0] 表示第 0 号房子粉刷成红色的成本花费;costs[1][2] 表示第 1 号房子粉刷成绿色的花费,以此类推。请你计算出粉刷完所有房子最少的花费成本。
注意:
所有花费均为正整数。示例:
输入: [[17,2,17],[16,16,5],[14,3,19]]
输出: 10
解释: 将 0 号房子粉刷成蓝色,1 号房子粉刷成绿色,2 号房子粉刷成蓝色。最少花费: 2 + 5 + 3 = 10。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/paint-house
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
类似题目:LeetCode 265. 粉刷房子 II(DP)
- dp[i][c] 表示刷完 i 房子后,i 房子是 c 颜色时,花费最小多少
class Solution {public:int minCost(vector<vector<int>>& costs) {int n = costs.size(), house, color;if(n==0) return 0;vector<vector<int>> dp(n,vector<int>(3,INT_MAX));dp[0] = costs[0];for(house = 1; house < n; house++){for(color = 0; color < 3; ++color){dp[house][color] = min(dp[house][color], costs[house][color]+min(dp[house-1][(color+1)%3], dp[house-1][(color+2)%3]));}}return min(dp[n-1][0], min(dp[n-1][1], dp[n-1][2]));}
};
12 ms 9.5 MB
长按或扫码关注我的公众号,一起加油、一起学习进步!
LeetCode 256. 粉刷房子(DP)相关推荐
- 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 编辑距离 II(DP)
1. 题目 给你两个单词 s 和 t,请你计算出将 s 转换成 t 所使用的最少操作数. 你可以对一个单词进行如下两种操作: 删除一个字符 替换一个字符 注意: 不允许插入操作 题目保证有解 示例: ...
- LeetCode 72. 编辑距离(DP)
1. 题目 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示 ...
- LeetCode--256. 粉刷房子(动态规划)
粉刷房子(动态规划) 1. 题目描述 2. 题目分析 3. C语言实现 1. 题目描述 难度:简单 2. 题目分析 这道题目是一道典型的动态规划问题,如果我们只把目光放在一个最少花费的身上,状态转化方 ...
- Leetcode之动态规划(DP)专题-1025. 除数博弈(Divisor Game)
Leetcode之动态规划(DP)专题-1025. 除数博弈(Divisor Game) 爱丽丝和鲍勃一起玩游戏,他们轮流行动.爱丽丝先手开局. 最初,黑板上有一个数字 N .在每个玩家的回合,玩家需 ...
最新文章
- 在Ubuntu 14.04 64bit上安装Markdown和绘图软件Haroopad
- 递归/回溯:subsets求子集
- DASI_1_IntroToData
- 网站被k不要慌,看看“老油条”们是怎么解决的吧!
- BERT论文阅读(二): CG-BERT:Conditional Text Generation with BERT for Generalized Few-shot Intent Detection
- JSP生成验证码源程序
- Ajax-goahead局部刷新页面
- Hyperledger Fabric 1.0 从零开始(七)——启动Fabric多节点集群
- 人生的许多不经意-致51CTO
- vulkan api_Vulkan开放标准API支持,针对Linux的新游戏以及更多游戏
- DTMF采用RFC2833进行带内传输的实现[ZT]
- python类中引用数据是通过_重载python类中的[]运算符以引用数字阵列数据内存
- Linux入门之安装Centos并实现Xshell远程SSH连接
- 如何面对大容量的数据存储
- ceph 源代码分析 — peering 过程
- java poi ppt转图片
- 两步使用Ubuntu 创建自己的网站
- android 方向传感器应用
- 苹果app退款_苹果上最流氓的功能,终于被彻底关掉,还退款208元
- 新能源车牌识别SDK核心算法不断更新