leetcode剑指 Offer II 091. 粉刷房子C++

博客讨论了一种使用动态规划解决粉刷房子问题的算法。代码实现中,维护一个状态数组dp,每次迭代更新每个状态的最小成本。即使某个节点的成本高,也可能在后续选择中成为最小成本路径的一部分。这个问题的关键在于理解状态转移,并考虑相邻颜色之间的转换成本。
摘要由CSDN通过智能技术生成

链接:

链接: 剑指 Offer II 091. 粉刷房子

描述,示例和提示:

在这里插入图片描述
在这里插入图片描述

代码

class Solution {
public:
    int minCost(vector<vector<int>>& costs) {
        vector<int> dp(3);
        for(int i = 0;i<3;i++) dp[i]=costs[0][i];

        for(int i = 1;i<costs.size();i++)
        {
            vector<int> newdp(3);
            for(int j = 0;j<3;j++)
                newdp[j] = min(dp[(j + 1) % 3], dp[(j + 2) % 3]) + costs[i][j];
            dp=newdp;
        }
        return *min_element(dp.begin(), dp.end());
    }
};

代码描述:

明确一些点:

  1. 当我们遍历给定数组的一个节点时,即使这个节点的值是整个数组中最大的,那么选择这个点的时候,也可能是最小的
  2. 当遍历到给定数组的一个节点时,如果选择这个节点时,那么它上一次需要选择的节点那么只有两个选择,(感觉类似 斐波那契额数列)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值