动态规划实战15 leetcode-256. Paint House
确定状态:
这个题其实和之前的那个阿里矩阵题是一样的,只不过是状态转移方程稍有不同,paint house就是把相邻的情况排除了。
dp[i][j]代表从0paint到i号房子,在i号房子涂j号色时用的最少costs。
因此状态转移方程如下
dp[i][j] = dp[i][j] + min{ dp[i-1][k]} 其中k=1....m 且k!=j
初始条件和边界条件
dp[i][j]=costs[i][j]
计算顺序
dp[1][0] dp[0][1] dp[0][2]
....
dp[n][0] dp[n][1] dp[n][2]
返回结果
min{ dp[n][0] , dp[n][1] ,dp[n][2] }
代码
public int minCost(int[][] costs) {//corner case if(costs==null||costs.length==0)return 0;for(int i=1;i<costs.length;i++){costs[i][0]+=Math.min(costs[i-1][1],costs[i-1][2]);costs[i][1]+=Math.min(costs[i-1][0],costs[i-1][2]);costs[i][2]+=Math.min(costs[i-1][1],costs[i-1][0]);}int n = costs.length-1;return Math.min(Math.min(costs[n][0], costs[n][1]), costs[n][2]);}
动态规划实战15 leetcode-256. Paint House相关推荐
- [实战]MVC5+EF6+MySql企业网盘实战(15)——逻辑重构2
写在前面 上篇文章修改文件上传的逻辑,这篇修改下文件下载的逻辑. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实 ...
- 动态规划实战--硬币找零问题
上一篇文章上提到硬币找零的例子,现在我们实战动态规划就从硬币找零开始 问题描述: 给定 n 种不同面值的硬币,分别记为 c[0], c[1], c[2], - c[n],同时还有一个总金额 k,编写一 ...
- 买卖股票类问题动态规划解法(Leetcode题解-Python语言)
在 Leetcode 中,关于买卖股票的问题共有6道,而这些题目是可以用相同的思维进行求解的,强烈推荐这篇总结,写得非常到位. 股票类问题的动态规划分三步走,1.首先明确方程的含义, T[i][k][ ...
- 动态规划——单词拆分(Leetcode 139)
题目选自Leetcode 139.单词拆分 问题描述: 解题思路: 怎么想到用动态规划的? 题目的相关标签中有动态规划.(QAQ) dp数组怎么选? dp[i]: 表示子串s[0:i] 是否全部能拆分 ...
- 动态规划——零钱兑换(Leetcode 322)
题目选自Leetcode 322.零钱兑换 想必大家看一眼就明白了(bushi),这就是动态规划的背包问题~ 算法思想 那么,既然知道了这是个动态规划问题,就要思考如何列出正确的状态转移方程? 1.确 ...
- ⭐算法入门⭐《二分枚举》简单15 —— LeetCode LCP 18. 早餐组合
文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述 小扣在秋日市集选择了一 ...
- 子串、子数组与子序列类型问题的动态规划求解(Leetcode题解-Python语言)
一般来说,子串和子数组都是连续的,而子序列是可以不连续的,遇到子序列问题基本上都是用动态规划求解. 53. 最大子数组和(剑指 Offer 42. 连续子数组的最大和) class Solution: ...
- LeetCode 256. 粉刷房子(DP)
文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成红色.蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其与相邻的两个房子颜色不能相同. 当然,因 ...
- 最大连续子数组和 动态规划_每日LeetCode,乘积最大子数组
152. 乘积最大子数组leetcode-cn.com 给你一个整数数组nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积. 示例 1: 输入: ...
- Leetcode 256.粉刷房子
Time: 20190903 Type: Easy 题目描述 假如有一排房子,共 n 个,每个房子可以被粉刷成红色.蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相 ...
最新文章
- Linux里新建文件/目录的默认权限
- 全面分析 Spring 的编程式事务管理及声明式事务管理(转)
- QML基础类型之color
- 装饰模式与代理模式的区别
- 某公司故障分析案例(实战案例)
- 监督学习 | SVM 之支持向量机Sklearn实现
- setattr()、getattr()、hasattr()【设置属性和方法、得到属性、判断是否有属性和方法】
- logstash收集java日志,多行合并成一行
- 字符串算法-Rabin-Karp
- TimeQuest就一定要搞定——时序分析基本公式
- linux下目录的基本命令
- struts 2.3.8备忘
- 走进javascript——DOM事件
- 2019年8月2 星期五 今日计划
- 深度学习基础 - 余弦定理
- 苹果快捷键怎么调出来_iPad常用快捷键
- html白色的斜线,面试官:如何使用 CSS 实现斜线效果?
- Android复习系列④之《Android进阶》
- Coremail论客全球安全生态合作伙伴召集令正式启动
- 实验1-2 Welcome to You! (5 分)