算法---动态规划练习-9(粉刷房子)

题目

  • [1. 题目解析](#1. 题目解析)
  • [2. 讲解算法原理](#2. 讲解算法原理)
  • [3. 编写代码](#3. 编写代码)

1. 题目解析

题目地址点这里

2. 讲解算法原理



  1. 创建dp表:vector<vector> dp(n, vector(3))。这里创建了一个二维向量dp,其中dpij表示第i天选择颜色j的最小成本。

  2. 初始化第一天的成本:for (int i = 0; i < 3; i++) { dp0i = costs0i; }。将第一天的成本设置为初始的颜色成本。

  3. 填表:使用循环遍历从第二天到最后一天,依次计算每天选择不同颜色的最小成本。

    • dpi0 = min(dpi - 11, dpi - 12) + costsi0:第i天选择颜色0的最小成本等于前一天选择颜色1和2的最小成本中的较小值加上当天选择颜色0的成本。
    • dpi1 = min(dpi - 10, dpi - 12) + costsi1:第i天选择颜色1的最小成本等于前一天选择颜色0和2的最小成本中的较小值加上当天选择颜色1的成本。
    • dpi2 = min(dpi - 11, dpi - 10) + costsi2:第i天选择颜色2的最小成本等于前一天选择颜色1和0的最小成本中的较小值加上当天选择颜色2的成本。
  4. 返回结果:return min(dpn - 10, min(dpn - 11, dpn - 12))。返回最后一天选择不同颜色的最小成本中的最小值,即为最小成本。


3. 编写代码

cpp 复制代码
class Solution {
public:
    int minCost(vector<vector<int>>& costs) {
        int n=costs.size();
        vector<vector<int>> dp(n,vector<int>(3));
        for(int i=0;i<3;i++)dp[0][i]=costs[0][i];
        if(n>1)
        {
        for(int i=1;i<n;i++)
        {
            dp[i][0]=min(dp[i-1][1],dp[i-1][2])+costs[i][0];
            dp[i][1]=min(dp[i-1][0],dp[i-1][2])+costs[i][1];
            dp[i][2]=min(dp[i-1][1],dp[i-1][0])+costs[i][2];
        }
        }
        return min(dp[n-1][0],min(dp[n-1][1],dp[n-1][2]));
    }
};
相关推荐
kisshyshy12 小时前
🍦 雪糕、食堂、火车厢:三幅漫画吃透栈、队列与链表
javascript·算法
众少成多积小致巨13 小时前
JNI (Java Native Interface) 技术手册中文参考指南
android·java·c++
猿人谷19 小时前
不只是 CPU 阈值:STAR 如何用 GAT + Transformer 做容器级自动扩缩容?
人工智能·算法
复杂网络20 小时前
Stable Diffusion 视觉大模型微调技术深度调研
算法
复杂网络20 小时前
基于 Stable Diffusion 架构的视觉大模型代表性工作与原理深度解析
算法
MrZhao40020 小时前
Agent Loop 如何用 Hook 扩展:权限、日志与工具拦截
算法
MrZhao40020 小时前
Agent 为什么需要 Skills:别把所有知识都塞进 system prompt
算法
JieE2122 天前
LeetCode 101. 对称二叉树|JS 递归 + 迭代双解法,彻底搞懂镜像判断
javascript·算法
JieE2123 天前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
Jack204 天前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法