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

题目

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

1. 题目解析

题目地址点这里

2. 讲解算法原理



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

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

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

    • dp[i][0] = min(dp[i - 1][1], dp[i - 1][2]) + costs[i][0]:第i天选择颜色0的最小成本等于前一天选择颜色1和2的最小成本中的较小值加上当天选择颜色0的成本。
    • dp[i][1] = min(dp[i - 1][0], dp[i - 1][2]) + costs[i][1]:第i天选择颜色1的最小成本等于前一天选择颜色0和2的最小成本中的较小值加上当天选择颜色1的成本。
    • dp[i][2] = min(dp[i - 1][1], dp[i - 1][0]) + costs[i][2]:第i天选择颜色2的最小成本等于前一天选择颜色1和0的最小成本中的较小值加上当天选择颜色2的成本。
  4. 返回结果:return min(dp[n - 1][0], min(dp[n - 1][1], dp[n - 1][2]))。返回最后一天选择不同颜色的最小成本中的最小值,即为最小成本。


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]));
    }
};
相关推荐
Fleshy数模21 分钟前
多分类任务下的经典机器学习算法实战:LR、RF、SVM等对比分析
算法·机器学习·分类
草莓熊Lotso24 分钟前
Linux IPC 进阶:System V 消息队列与信号量(含内核管理深度解析)
linux·运维·服务器·数据库·c++·人工智能·mysql
风吹乱了我的头发~3 小时前
Day52:2026年3月20日打卡
算法
2401_831824968 小时前
基于C++的区块链实现
开发语言·c++·算法
We་ct8 小时前
LeetCode 918. 环形子数组的最大和:两种解法详解
前端·数据结构·算法·leetcode·typescript·动态规划·取反
愣头不青8 小时前
238.除了自身以外数组的乘积
数据结构·算法
汉克老师9 小时前
GESP5级C++考试语法知识(六、链表(一)单链表)
c++·链表·单链表·快慢指针·进阶·gesp5级·gesp五级
人工智能AI酱9 小时前
【AI深究】逻辑回归(Logistic Regression)全网最详细全流程详解与案例(附大量Python代码演示)| 数学原理、案例流程、代码演示及结果解读 | 决策边界、正则化、优缺点及工程建议
人工智能·python·算法·机器学习·ai·逻辑回归·正则化
WangLanguager9 小时前
逻辑回归(Logistic Regression)的详细介绍及Python代码示例
python·算法·逻辑回归
m0_518019489 小时前
C++与机器学习框架
开发语言·c++·算法