动态规划法在解决实际问题中的应用

article/2025/8/26 23:11:49

实际上,我们可以从根结点出发,深度优先搜索这棵二叉树。对于每棵子树,其子树元素和等于子树根结点的元素值,加上左子树的元素和,以及右子树的元素和。

每个房子可以被粉刷成三种颜色中的一种,需要计算在满足相邻房子的颜色不同的情况下粉刷所有房子的最小花费成本。由于当已知粉刷前 i 个房子的最小花费成本时,根据粉刷第 i+1 号房子的花费成本可以计算粉刷前 i+1 个房子的最小花费成本,因此可以使用动态规划计算最小花费成本。

由于每个房子可以被粉刷成三种颜色中的一种,因此需要分别考虑粉刷成三种颜色时的最小花费成本。

用 dp[i][j] 表示粉刷第 0 号房子到第 i 号房子且第 i 号房子被粉刷成第 j 种颜色时的最小花费成本。由于一共有 n 个房子和 3 种颜色,因此 0≤i<n0 ,0≤j<3 。

当只有第 0 号房子被粉刷时,对于每一种颜色,总花费成本即为将第 0 号房子粉刷成该颜色的花费成本,因此边界条件是:对于任意 0≤j<30 ,dp[0][j]=costs[0][j]。

对于 1≤i<n1 ,第 i 号房子和第 i−1 号房子的颜色必须不同,因此当第 i 号房子被粉刷成某一种颜色时,第 i−1 号房子只能被粉刷成另外两种颜色之一。当第 i 号房子分别被粉刷成三种颜色时,粉刷第 0 号房子到第 i 号房子的最小花费成本计算如下:

代码

C#

public class Solution {public int MinCost(int[][] costs) {int n = costs.Length;int[] dp = new int[3];for (int j = 0; j < 3; j++) {dp[j] = costs[0][j];}for (int i = 1; i < n; i++) {int[] dpNew = new int[3];for (int j = 0; j < 3; j++) {dpNew[j] = Math.Min(dp[(j + 1) % 3], dp[(j + 2) % 3]) + costs[i][j];}dp = dpNew;}return Math.Min(Math.Min(dp[0], dp[1]), dp[2]);}
}

C++

class Solution {
public:int minCost(vector<vector<int>>& costs) {int n = costs.size();vector<int> dp(3);for (int j = 0; j < 3; j++) {dp[j] = costs[0][j];}for (int i = 1; i < n; i++) {vector<int> dpNew(3);for (int j = 0; j < 3; j++) {dpNew[j] = min(dp[(j + 1) % 3], dp[(j + 2) % 3]) + costs[i][j];}dp = dpNew;}return *min_element(dp.begin(), dp.end());}   
};

 

 


http://www.hkcw.cn/article/wkwdpnMbns.shtml

相关文章

尝鲜纯血鸿蒙,华为国际版本暂时不支持升级。如mateX6 国际版?为什么不支持?什么时候支持?

一&#xff1a;mateX6 国际版支持鸿蒙吗&#xff1f; 不支持 二&#xff1a;华为国际版支持鸿蒙吗&#xff1f; 不支持 三&#xff1a;华为国际版什么时候支持&#xff1f; 2025年预期可以支持。请耐心等待。 三&#xff1a;国际版为什么不支持&#xff1f; EMUI 采用AO…

足迹地图:记录旅程,点亮世界

旅行&#xff0c;是探索世界的脚步&#xff0c;也是心灵的归宿。每一次的出发与归来&#xff0c;都承载着无数的回忆与故事。而足迹地图这款旅行记录软件&#xff0c;就像一位忠实的旅伴&#xff0c;陪伴着你记录下每一段旅程&#xff0c;将你的足迹点亮在世界的地图上&#xf…

Qt 读取和写入 INI 格式的配置文件

Qt 读取和写入 INI 格式的配置文件 前言&#xff1a;INI 配置文件在 Qt 开发中的重要性基础夯实&#xff1a;INI 文件结构与 QSettings 核心概念1. INI 文件的基本结构2. QSettings 类概述3. 初始化 QSettings 对象4. 基本读写操作5. 高级操作技巧5.1 处理数组和列表5.2 检查键…

计算机网络之差错控制中的 CRC(循环冗余校验码)

文章目录 1 概述1.1 简介1.2 特点1.3 基本原则 2 实现步骤3 例题 1 概述 修改中&#xff0c;请稍等。。。 1.1 简介 CRC&#xff1a;Cyclic Redundancy Check&#xff08;循环冗余校验&#xff09;是计算机网络中常用的一种差错控制编码方法&#xff0c;用于检测数据传输或存…

VLC-QT 网页播放RTSP

先看效果图,代码在文章末尾,包含源码,vlc-qt完整的库 环境说明:VS 2017 QTQt5.13.0 MSVC2017 32位 将vlc_install 目录下的bin,include,lib里所有的东西分别放在qt目录下 bin -> C:\Qt\Qt5.13.0\5.13.0\msvc2017\bin include->C:\Qt\Qt5.13.0\5.13.0\msvc201…

塔能科技:为多行业工厂量身定制精准节能方案

在当今追求可持续发展的时代&#xff0c;工厂能耗精准节能成为众多企业关注的焦点。塔能科技凭借先进的技术和丰富的经验&#xff0c;服务于广泛的行业客户&#xff0c;其中55.5%来自世界500强和上市公司。针对不同行业工厂的特点和需求&#xff0c;塔能提供了一系列行之有效的…

Qt font + ToolTip + focusPolicy + styleSheet属性(5)

文章目录 font属性API接口直接在Qt Designer编辑图形化界面通过纯代码的方式修改文字属性 ToolTip属性API接口代码演示 focusPolicy属性概念理解API接口通过编辑图形化界面演示 styleSheet属性概念理解通过编辑图形化界面展示代码 图形化界面的方式展示&#xff08;夜间/日间模…

lwip_setsockopt设置地址复用出错(lwip默认不打开,lwip_bindu也会提示端口被占用)

/* 3. 设置地址复用 */ flags lwip_setsockopt(new_sockfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); if (flags < 0) {NET_DEBUG_PRINT("[NET] SO_REUSEADDR failed: %s\n", strerror(errno));int opt_err errno;// 详细错误分析switch(opt_err) {c…

力扣面试150题--二叉树的右视图

Day 53 题目描述 思路 采取层序遍历&#xff0c;利用一个high的队列来保存每个节点的高度&#xff0c;highb和y记录上一个节点的高度和节点&#xff0c;在队列中&#xff0c;如果队列中顶部元素的高度大于上一个节点的高度&#xff0c;说明上一个节点就是上一层中最右边的元素…

Powerbuilder 连接达梦数据库(ODBC 和 JDBC)

一、ODBC PB只支持32位驱动&#xff0c;可以同时安装64和32位驱动&#xff0c;分别下载64和32位安装包安装 1、选择DMB ODBC DRIVER驱动 2、不描述&#xff0c;看图输信息即可 3、连接代码 SQLCA.DBMS "ODBC" SQLCA.AutoCommit False SQLCA.DBParm "Conne…

美化显示GDB调试的数据结构

笔者在前面的博文记一次pdf转Word的技术经历中有使用到mupdf库&#xff0c;该库是使用C语言写的一个操作PDF文件的库&#xff0c;同时提供了Python接口&#xff0c;Java接口和JavaScript接口。 在使用该库时&#xff0c;如果想要更高的性能&#xff0c;使用C语言接口是不二的选…

从融智学视角对决策态度进行定理级提炼,结合三标准数学建模

摘要&#xff1a;本文从融智学视角提出"决策态度定理"&#xff0c;构建了态度三要素&#xff08;化繁为简、迎难而上、乐在其中&#xff09;的数学模型。定理将人生轨迹表述为复平面路径积分&#xff1a;命运∫[态度⊗选择]dt&#xff0c;证明三要素协同作用可使决策…

秋招Day11 - JVM - 类加载机制

了解类的加载机制吗&#xff1f; JVM是运行Java字节码&#xff0c;也就是运行.class文件的虚拟机&#xff0c;JVM把.class文件中描述类的数据结构加载到内存中&#xff0c;并对数据进行校验&#xff0c;解析和初始化&#xff0c;最终转化为JVM可以使用的类型&#xff08;Klass…

纵览网丨病毒学领域的 AI 变局:机遇、隐忧与监管之路

纵览网&#xff08;www.zonglan.com&#xff09;人工智能AI正在各个领域高歌猛进&#xff0c;特别是在病毒学领域。最近在一项病毒学诊断的研究测试中&#xff0c;有着天才水平称号的OpenAI的o3模型&#xff0c;平均得分已经能够达到43.8%&#xff0c;而拥有学位的人类病毒博士…

从实验室到商用!铁电液晶如何改写显示技术格局?

一、显示技术瓶颈&#xff1a;传统液晶的「成长烦恼」 在 VR 游戏中&#xff0c;快速转动头部时画面拖影让人眩晕&#xff1b;高端投影在强光下画质模糊&#xff1b;医用显示器难以呈现 CT 影像的细微层次…… 这些困扰背后&#xff0c;是传统液晶技术在刷新率、分辨率和环境适…

电网中三相不平衡治理的全面解析

在现代电力系统中&#xff0c;三相平衡是保障电网高效、稳定运行的关键要素。然而&#xff0c;三相不平衡现象却时有发生&#xff0c;给电网的可靠供电和用电设备的安全运行带来诸多挑战。深入了解三相不平衡治理的相关知识&#xff0c;对于提升电网运行水平、保障电力供应质量…

2023年6级第一套长篇阅读

画名词概念&#xff0c;动词概念 多处定位原词加同义改写 画关键词&#xff0c;多处定位直接就可以选A了 没有定位的句子先比没匹配到的段落&#xff0c;再匹配长的段落先易后难

Opencv实用操作5 图像腐蚀膨胀

相关函数 腐蚀函数 img1_erosion cv2.erode(img1,kernel,iterations1) &#xff08;图片&#xff0c;卷积核&#xff0c;次数&#xff09; 膨胀函数 img_dilate cv2.dilate(img2,kernel1,iterations1) &#xff08;图片&#xff0c;卷积核&#xff0c;次数&#xff09;…

lua的注意事项2

总之&#xff0c;下面的返回值不是10&#xff0c;a&#xff0c;b 而且

vr中风--数据处理模型搭建与训练

# -*- coding: utf-8 -*- """ MUSED-I康复评估系统&#xff08;增强版&#xff09; 包含&#xff1a;多通道sEMG数据增强、混合模型架构、标准化处理 """ import numpy as np import pandas as pd from sklearn.model_selection import train_te…