山西网站建设多少钱wordpress如何备份 网站
山西网站建设多少钱,wordpress如何备份 网站,企业做网站需要什么手续吗,站内搜索引擎目录
力扣LCR 091. 粉刷房子
解析代码 力扣LCR 091. 粉刷房子
LCR 091. 粉刷房子
难度 中等
假如有一排房子#xff0c;共 n 个#xff0c;每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种#xff0c;你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相…目录
力扣LCR 091. 粉刷房子
解析代码 力扣LCR 091. 粉刷房子
LCR 091. 粉刷房子
难度 中等
假如有一排房子共 n 个每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。
当然因为市场上不同颜色油漆的价格不同所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个 n x 3 的正整数矩阵 costs 来表示的。
例如costs[0][0] 表示第 0 号房子粉刷成红色的成本花费costs[1][2] 表示第 1 号房子粉刷成绿色的花费以此类推。
请计算出粉刷完所有房子最少的花费成本。
示例 1
输入: costs [[17,2,17],[16,16,5],[14,3,19]]
输出: 10
解释: 将 0 号房子粉刷成蓝色1 号房子粉刷成绿色2 号房子粉刷成蓝色。最少花费: 2 5 3 10。示例 2
输入: costs [[7,6,2]]
输出: 2提示:
costs.length ncosts[i].length 31 n 1001 costs[i][j] 20
class Solution {
public:int minCost(vectorvectorint costs) {}
}; 解析代码
以某个位置为结尾结合题目要求定义状态表示
但在这个题在 i 位置的时候会面临红蓝绿三种抉择所依赖的状态需要细分
dp[i][0] 表示粉刷到 i 位置的时候最后⼀个位置粉刷上红色此时的最小花费dp[i][1] 表示粉刷到 i 位置的时候最后⼀个位置粉刷上蓝色此时的最小花费dp[i][2] 表示粉刷到 i 位置的时候最后⼀个位置粉刷上绿色此时的最小花费
因为状态表示定义了三个因此状态转移方程也要分析三个 对于 dp[i][0] 如果第 i 个位置粉刷上红色那么 i - 1 位置上可以是蓝色或者绿色。因此我们需要知道粉刷到 i - 1 位置上的时候粉刷上蓝色或者绿色的最小花费然后加上 i位置的花费即可。于是状态转移方程为
dp[i][0] min(dp[i - 1][1], dp[i- 1][2]) costs[i - 1][0] ;
同理我们可以推导出另外两个状态转移方程为
dp[i][1] min(dp[i - 1][0], dp[i - 1][2]) costs[i - 1][1] ;dp[i][2] min(dp[i - 1][0], dp[i - 1][1]) costs[i - 1][2] ;。 根据题意和状态转移方程虚拟节点初始化成0即可填表顺序是从左往右三个表一起填最后返回最后一个房子粉刷颜色的最小花费
class Solution {
public:int minCost(vectorvectorint costs) {int n costs.size();vectorvectorint dp(n 1, vectorint(3));for(int i 1; i n; i){ // 注意costs下标映射dp[i][0] min(dp[i-1][1],dp[i-1][2]) costs[i-1][0];dp[i][1] min(dp[i-1][0],dp[i-1][2]) costs[i-1][1];dp[i][2] min(dp[i-1][0],dp[i-1][1]) costs[i-1][2];}return min(dp[n][0], min(dp[n][1], dp[n][2]));}
};
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/90192.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!