算法---动态规划练习-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]));
    }
};
相关推荐
阜阳山君GEO22 分钟前
豆包 SEED 新版本 GEO 优化:信源金字塔、打分体系与避坑落地指南
人工智能·算法
晓天衡宇•评测社区29 分钟前
晓天衡宇亮相 2026 云栖大会:迈向更可信的高质量评测
人工智能·算法·机器学习
CQU_JIAKE36 分钟前
9.12[a]
算法
CQU_JIAKE1 小时前
9.11【A】
算法
All for pursuit.1 小时前
【分治-3】347.前K个高频元素
数据结构·c++·算法·leetcode
头发够用的程序员1 小时前
TensorRT 自定义算子插件实战(一):从零手写 customScaledTanh
c++·人工智能·pytorch·python·深度学习·边缘计算·jetson
哭泣方源炼蛊2 小时前
正则表达式c++内容汇集
数据库·c++·mysql·正则表达式
索尔~古德曼2 小时前
CF(1400-1400&1300-1500)错题集
算法
别动我齐刘海2 小时前
简历技术栈全面复习——UDP / TCP / CAN / ZMQ / Protobuf 通信工程
网络·c++·python·tcp/ip·机器学习·udp·github
All for pursuit.3 小时前
【二分查找-2】34.在排序数组中查找元素的第一个和最后一个位置
数据结构·c++·算法·leetcode