首页 > 编程语言 >算法---动态规划练习-9(粉刷房子)

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

时间:2024-03-31 10:58:17浏览次数:36  
标签:颜色 min 最小 粉刷 --- 算法 costs 成本 dp

题目

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. 编写代码

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]));
    }
};

标签:颜色,min,最小,粉刷,---,算法,costs,成本,dp
From: https://blog.csdn.net/originalHSL/article/details/137194424

相关文章

  • 2-23. 制作人物背包内的 UI
    创建PlayerBag创建SlotHolder给SlotHolder添加GridLayoutGroup,ChildAlignment改为MiddleCenter然后再添加上节课的槽位预制体添加头像和金币项目相关代码代码仓库:https://gitee.com/nbda1121440/DreamOfTheKingdom.git标签:20240331_1050......
  • L2-011 玩转二叉树
    和L2-006是一样的。正常建树,只是在BFS的时候先放右儿子。L2-006树的遍历https://www.cnblogs.com/chengyiyuki/p/18106375代码:#include<bits/stdc++.h>usingnamespacestd;constintN=40;intpre[N],in[N];intL[N],R[N];intbuild(intal,intar,intbl,int......
  • NewStarCTF-thirdweek
    一、阳光开朗大男孩1.题目给出了secret.txt和flag.txt两个文件,secret.txt内容如下:法治自由公正爱国公正敬业法治和谐平等友善敬业法治富强公正民主法治和谐法治和谐法治法治公正友善敬业法治文明公正自由平等诚信平等公正敬业法治和谐平等友善敬业法治和谐和谐富强和谐富强和谐......
  • NewStarCTF-secondweek
    一、新建Word文档1.doc文档隐写,将如图所示的设置打开,即可看到文字。2.新佛曰加密,在线网站解密。(http://hi.pcmoe.net/buddha.html)二、永不消逝的电波1.附件是个音频,audacity打开,可以看到明显的长短波。2.莫斯密码解密即可。源报文:..-./.-../.-/--./-/...././-..././.../......
  • NewStarCTF-fourthweek
    一、R通大残下载附件后发现图片最上面有一行色块:编写脚本提取出第一行像素色块的RGB值:fromPILimportImageimage=Image.open('secret.png')pixels=image.load()width,height=image.sizeforxinrange(width):r,g,b=pixels[x,0]print(f"......
  • NewStarCTF-firstweek
    一、Crypto-brainfuck1.附件内容如下。++++++++[>>++>++++>++++++>++++++++>++++++++++>++++++++++++>++++++++++++++>++++++++++++++++>++++++++++++++++++>++++++++++++++++++++>++++++++++++++++++++++>++++++++++++++++++++++++>+++++......
  • NewStarCTF-fifthweek
    一、隐秘的图片给出了两张图片,像是二维码,但是其中一张图片是损坏的,因此想到使用Stegsolve对两张图片进行异或:异或得到一张新的二维码,扫描获得Flag:二、ezhard拿到文件之后发现是硬盘格式文件新建目录挂载flag在hint.png三、新建Python文件pyc文件隐写很容易就能找......
  • java数据结构与算法刷题-----LeetCode1091. 二进制矩阵中的最短路径
    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846文章目录广度优先+双分裂蛇广度优先+双分裂蛇双分裂蛇:是求二维表中从起点到终点的经典思路(也是......
  • java数据结构与算法刷题-----LeetCode95. 不同的二叉搜索树 II
    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846文章目录分治回溯+记忆化搜索分治回溯+记忆化搜索卡特兰数,例如对于n个进栈元素,有多少种出栈顺序,......
  • 18day-19day-2.2.CSS实战与提高
    2.2.CSS实战与提高练习11:制作开心餐厅页面CSS/*层次选择器*/p{font-size:14px;}/*body后代h2字体16px*/bodyh2{font-size:16px;}/*第一个h2颜色变为红色*/.firstH2{color:red;}/*第一个h2后面的通用兄弟元素h2变为蓝色*/.firstH2~h2{......