
动态规划
文章平均质量分 95
以动态规划为核心,深入解析其基本原理与应用场景,通过实战案例逐步掌握动态规划的解题思路与技巧,提升算法思维与问题解决能力,助力在复杂问题中找到高效解法,打下坚实的编程基础。
Albert_Lsk
主要研究方向为机器人及算法。
机器人方向包括:MATLAB机器人建模、轨迹规划研究、动力学及力控制。
算法方向包括:MATLAB算法应用、算法实现。
展开
-
【LeetCode】动态规划—790. 多米诺和托米诺平铺(附完整Python/C++代码)
本文将详细讨论LeetCode上的"多米诺和三米诺平铺"问题。这是一个经典的动态规划问题,要求我们计算用多米诺骨牌和三米诺骨牌填充2x n网格的方法数。我们将从问题定义开始,逐步深入理解问题本质,提出解决方案,并给出Python和C++的具体实现。原创 2024-10-22 11:45:13 · 1016 阅读 · 0 评论 -
【LeetCode】动态规划—983. 最低票价(附完整Python/C++代码)
在旅行中,选择最优的票务购买方案是一个常见的问题。给定多个出行日期以及不同票种的费用,我们需要计算出为旅行者提供的最小票务费用。本篇文章将通过动态规划的方法,探讨如何有效解决这个问题。原创 2024-10-22 10:50:20 · 662 阅读 · 0 评论 -
【LeetCode】动态规划—91. 解码方法(附完整Python/C++代码)
在处理字符串解码问题时,我们通常会遇到需要将数字序列映射到字母的情况。本问题要求计算给定字符串 s 的解码方式的总数,其中字符串仅包含数字,每个数字或数字对可以解码为对应的字母。本文将详细讲解如何通过动态规划来高效解决这一问题。原创 2024-10-21 10:16:21 · 1239 阅读 · 0 评论 -
【LeetCode】动态规划—2466. 统计构造好字符串的方案数(附完整Python/C++代码)
在本问题中,我们需要计算构建良好字符串的方式。给定两个整数 low 和 high,表示字符串的最小和最大长度,以及两个字符 zero 和 one,我们的任务是找到用这两个字符构建字符串的所有可能方式,确保构建的字符串长度在 low 到 high 之间。原创 2024-10-21 09:59:57 · 1182 阅读 · 0 评论 -
【LeetCode】动态规划—322. 零钱兑换(附完整Python/C++代码)
零钱兑换 是一个经典的 动态规划 问题。给定一个整数数组 coins,其中每个元素代表不同面额的硬币,再给定一个整数 amount,表示需要凑成的总金额,要求计算出用这些硬币凑成该金额的最少硬币数量。如果凑不出该金额,则返回 -1。原创 2024-10-16 10:27:17 · 1068 阅读 · 0 评论 -
【LeetCode】动态规划—2140. 解决智力问题(附完整Python/C++代码)
使用脑力解决问题 是一个典型的动态规划问题。给定一个数组 questions,其中 questions[i] = [points_i, brainpower_i] 表示解决第 i 个问题可以获得的积分是 points_i,但解决它后你必须跳过接下来的 brainpower_i 个问题。目标是通过选择一系列问题,最大化你可以获得的总积分。原创 2024-10-16 10:19:37 · 1099 阅读 · 0 评论 -
【LeetCode】动态规划—474. 一和零(附完整Python/C++代码)
一和零 是一个典型的 0-1 背包问题。给定若干个仅由 0 和 1 组成的二进制字符串,再给定两个整数 m 和 n,表示最多可以包含的 0 和 1 的数量。要求通过选取若干个字符串,使得这些字符串的总 0 和 1 的数量不超过 m 和 n,并且在这些条件下选取的字符串数量最多。原创 2024-10-14 12:23:46 · 772 阅读 · 0 评论 -
【LeetCode】动态规划—377. 组合总和 Ⅳ(附完整Python/C++代码)
组合总和 IV 是一个经典的动态规划问题。给定一个由 正整数 组成的数组 nums 和一个目标值 target,求出可以使用 nums 中的数字通过排列得到目标值 target 的不同组合的数量。数组中的数字可以多次重复使用。与其他类似的组合问题不同的是,排列的顺序会影响结果。也就是说,对于相同的数字组合,排列不同会被视为不同的组合。原创 2024-10-14 12:20:19 · 715 阅读 · 0 评论 -
【LeetCode】动态规划—518. 零钱兑换 II(附完整Python/C++代码)
零钱兑换 II 是一个经典的动态规划问题。给定几种不同面额的硬币和一个总金额 amount,要求找出可以凑成总金额的不同硬币组合的数量。每种硬币可以使用无限次。该问题与常见的 背包问题 相似,但不同的是这里的每种硬币可以重复使用。原创 2024-10-14 09:00:00 · 1209 阅读 · 0 评论 -
【LeetCode】动态规划—279. 完全平方数(附完整Python/C++代码)
完全平方数问题 是一个经典的动态规划问题。给定一个正整数 n,要求将其表示为若干个完全平方数的和,且要求这些完全平方数的数量最少。例如:12 = 4 + 4 + 4,因此 12 可以表示为 3 个完全平方数的和。我们可以利用动态规划的思想,逐步构建出最优解,即找到使得 n 表示为最少的完全平方数的方案。原创 2024-10-14 08:15:00 · 1215 阅读 · 0 评论 -
【LeetCode】动态规划—124. 二叉树中的最大路径和(附完整Python/C++代码)
二叉树中的最大路径和 是一个涉及到二叉树的经典动态规划问题。给定一棵二叉树,其中每个节点包含一个整数值,求出从任意节点开始到任意节点结束(路径上至少包含一个节点)的路径中的最大和。路径可以从树中的任意节点开始和结束,且必须沿着父节点和子节点之间的边走。该问题的难点在于路径可以穿过树的任意部分,因此我们需要同时考虑左右子树的贡献,并且动态更新最大路径和。原创 2024-10-13 14:35:52 · 2033 阅读 · 0 评论 -
【LeetCode】动态规划—337. 打家劫舍 III(附完整Python/C++代码)
打家劫舍 III 是 打家劫舍 系列问题中的一个变种。这里的房屋排列不再是线性排列,而是形成了一棵二叉树,每个节点代表一个房子,每个房子内有一定的钱。相邻的房子(即父子关系)不能同时被抢。我们的目标是找出在这棵二叉树中,能够抢劫到的最大金额。原创 2024-10-13 13:48:19 · 1146 阅读 · 0 评论 -
【LeetCode】动态规划—95. 不同的二叉搜索树 II(附完整Python/C++代码)
不同的二叉搜索树 II 是一个要求构造出所有可能的 二叉搜索树(BST) 的问题。给定一个整数 n,我们需要构造出由 1 到 n 为节点的所有不同形态的二叉搜索树,并返回这些树的根节点列表。该问题与 不同的二叉搜索树 I 不同的是,不仅要求计算不同二叉搜索树的数量,还需要输出所有可能的二叉搜索树的具体结构。原创 2024-10-13 02:05:06 · 1129 阅读 · 0 评论 -
【LeetCode】动态规划—96. 不同的二叉搜索树(附完整Python/C++代码)
不同的二叉搜索树问题 是一个经典的动态规划问题。给定一个整数 n,我们需要构造出由 n 个节点组成的所有不同的 二叉搜索树(BST)。在这类问题中,我们不仅需要理解二叉搜索树的性质,还需要通过动态规划来计算不同形态的二叉搜索树的数量。原创 2024-10-13 00:50:33 · 987 阅读 · 0 评论 -
【LeetCode】动态规划—188. 买卖股票的最佳时机 IV(附完整Python/C++代码)
买卖股票的最佳时机 IV 是股票交易系列问题中的一个变种,难度较高。该问题要求我们最多进行 k 次交易,每次交易包含一次买入和一次卖出,目标是通过这 k 次交易获取最大利润。该问题结合了 动态规划 和 贪心 的思想,要求我们合理规划每次买卖的时机以获取最大利润。原创 2024-10-13 00:08:29 · 1324 阅读 · 0 评论 -
【LeetCode】动态规划—123. 买卖股票的最佳时机 III(附完整Python/C++代码)
买卖股票的最佳时机 III 是一个动态规划问题的经典变种。给定一个数组 prices,其中 prices[i] 代表第 i 天的股票价格。你最多可以进行 两次交易(一次交易包含一次买入和一次卖出),目标是通过这两次交易获得最大的利润。该问题的难点在于如何合理规划买卖时机,以获取最大收益。原创 2024-10-12 23:05:46 · 912 阅读 · 0 评论 -
【LeetCode】动态规划—714. 买卖股票的最佳时机含手续费(附完整Python/C++代码)
带手续费的买卖股票问题 是动态规划的经典问题之一。给定一个数组 prices 表示股票每天的价格,并且每次卖出股票时需要支付一定的手续费 fee,目标是通过在任意天买入或卖出股票,以最大化利润。该问题要求我们考虑每次交易时手续费的影响,并通过动态规划的方法来规划最优的买卖操作。原创 2024-10-12 18:11:27 · 1187 阅读 · 0 评论 -
【LeetCode】动态规划—309. 买卖股票的最佳时机含冷冻期(附完整Python/C++代码)
最佳买卖股票时机含冷冻期问题 是一个经典的动态规划问题。给定一个数组表示股票的价格,每天你只能做一件事:买入股票、卖出股票或者冷冻(休息)。如果你在一天卖出了股票,那么第二天你无法进行任何交易(有一天的冷冻期)。目标是通过买卖股票来获得最大的收益。该问题要求我们结合动态规划的思想,合理规划买卖操作,以获取最大的利润。原创 2024-10-12 18:06:03 · 1000 阅读 · 0 评论 -
【LeetCode】动态规划—1312. 让字符串成为回文串的最少插入次数(附完整Python/C++代码)
最少插入次数使字符串变为回文 是一个经典的动态规划问题。我们需要计算出通过最少的插入次数将给定的字符串转换为回文字符串。回文字符串是指正读和反读相同的字符串。通过动态规划的思想,我们可以高效地解决这一问题,分析每个字符与其对称位置之间的关系。原创 2024-10-12 11:43:40 · 1197 阅读 · 0 评论 -
【LeetCode】动态规划—1035. 不相交的线(附完整Python/C++代码)
Uncrossed Lines(不相交的线问题) 是一个典型的动态规划问题,它的解法与 最长公共子序列(LCS, Longest Common Subsequence) 非常相似。我们可以把该问题视作两个数组之间的最大匹配问题,其中相同的数字可以连成一条线,而我们要求这些线相互不交叉。通过动态规划来计算两个数组中的最长公共子序列的长度,我们可以有效地解决这个问题。原创 2024-10-12 11:37:40 · 832 阅读 · 0 评论 -
【LeetCode】动态规划—1143. 最长公共子序列(附完整Python/C++代码)
最长公共子序列问题(LCS, Longest Common Subsequence) 是经典的动态规划问题,要求在两个字符串中找到最长的子序列(不要求子序列连续),使得这个子序列同时出现在两个字符串中。这类问题广泛应用于比较文本相似度、DNA序列分析等领域。我们可以使用动态规划的思想来高效地求解这一问题。原创 2024-10-12 11:32:46 · 1841 阅读 · 0 评论 -
【LeetCode】动态规划—1964. 找出到每个位置为止最长的有效障碍赛跑路线(附完整Python/C++代码)
最长有效障碍物路线问题 是一个涉及到 最长递增子序列(LIS) 变种的问题。给定一个障碍物高度的数组,要求在每个位置找到一个最长有效的障碍物路线,满足在该位置的障碍物高度必须大于或等于之前路线中的最大高度。这个问题结合了 动态规划 和 二分查找 的思想,我们可以使用这些算法来高效地求解该问题。原创 2024-10-12 10:49:40 · 1078 阅读 · 0 评论 -
【LeetCode】动态规划—354. 俄罗斯套娃信封问题(附完整Python/C++代码)
俄罗斯套娃信封问题 是一个二维优化问题,类似于经典的 最长递增子序列(LIS) 问题。给定若干个信封,每个信封具有两个维度:宽度 w 和高度 h。要求找出最多可以嵌套的信封个数。一个信封 A 可以嵌套到信封 B 中的条件是:A.w < B.w 且 A.h < B.h。通过将问题从二维降到一维,并结合动态规划和二分查找的思想,我们可以有效地解决这个问题。本文将详细讲解这一思路,并提供 Python 和 C++ 的实现。原创 2024-10-12 09:59:09 · 1117 阅读 · 0 评论 -
【LeetCode】动态规划—1027. 最长等差数列(附完整Python/C++代码)
最长等差子序列问题是一种经典的动态规划问题,要求找到给定整数数组中元素之间有固定差值的最长子序列。该问题的难点在于,如何在每次找到满足等差条件的同时,最大化子序列的长度。通过结合哈希表或数组来存储中间结果,我们可以高效地解决这一问题。原创 2024-10-11 17:43:03 · 1595 阅读 · 0 评论 -
【LeetCode】动态规划—1218. 最长定差子序列(附完整Python/C++代码)
在许多动态规划问题中,使用哈希表优化查询和更新操作是常见的技巧。最长等差子序列问题正是其中的一个例子,它要求我们找到给定数组中符合特定差值的最长子序列。通过动态规划结合哈希表,我们可以有效地解决这个问题,并降低时间复杂度。原创 2024-10-11 17:30:21 · 889 阅读 · 0 评论 -
【LeetCode】动态规划—646. 最长数对链(附完整Python/C++代码)
在这个问题中,我们需要找到可以形成的最长数对链。数对 (a, b) 的链要求 a < b,并且数对链的连接需要满足 b1 < a2。这类似于寻找最长递增子序列的问题,可以通过动态规划或者贪心算法来解决。贪心算法通过将数对按右端排序,并逐步选择满足条件的数对,能够在更短的时间内解决问题。本文将详细介绍动态规划和贪心策略,并提供 Python 和 C++ 代码示例,帮助你理解并掌握这一问题的解法。原创 2024-10-11 16:55:45 · 953 阅读 · 0 评论 -
【LeetCode】动态规划—673. 最长递增子序列的个数(附完整Python/C++代码)
在算法研究中,序列问题是一个常见而重要的主题。最长递增子序列问题不仅在理论上具有挑战性,同时在许多实际应用中也非常有用,如数据分析、动态规划和计算机视觉等领域。本文将深入探讨如何利用动态规划和计数技巧来解决该问题,同时提供 Python 和 C++ 的具体实现,以帮助读者更好地理解和掌握这一算法。原创 2024-10-10 17:42:56 · 1148 阅读 · 0 评论 -
【LeetCode】动态规划—300. 最长递增子序列(附完整Python/C++代码)
在计算机科学中,动态规划是解决许多优化问题的强大工具。最长递增子序列问题是一个经典示例,它不仅展示了动态规划的基本思想,还引导我们思考如何优化算法。本文将详细探讨这一问题的基本思路及其实现方法,提供 Python 和 C++ 的解决方案,并对算法进行深入分析。原创 2024-10-10 14:20:42 · 5130 阅读 · 0 评论 -
【LeetCode】动态规划—115. 不同的子序列(附完整Python/C++代码)
在字符串处理的领域,不同子序列问题是一个经典的挑战,涉及到如何计算一个字符串的所有不同子序列以匹配另一个字符串。通过动态规划方法,我们能够有效地找出字符串之间的匹配数量,为更复杂的字符串问题提供解决方案。本文将详细介绍这一问题的思路、解决方法以及相应的 Python 和 C++ 实现代码。原创 2024-10-08 17:59:03 · 1096 阅读 · 0 评论 -
【LeetCode】动态规划—712. 两个字符串的最小ASCII删除和(附完整Python/C++代码)
在字符串处理的过程中,如何有效地将两个字符串转换为相同的形式是一个重要的问题。最小 ASCII 删除和问题提供了一种评估字符串相似性的有效方法,通过计算所需删除字符的 ASCII 值和,为我们提供了清晰的转换成本。本文将探讨这一问题的基本思路,并给出动态规划的实现方法,最后展示 Python 和 C++ 的具体代码。原创 2024-10-08 16:35:24 · 992 阅读 · 0 评论 -
【LeetCode】动态规划—72. 编辑距离(附完整Python/C++代码)
编辑距离问题是字符串处理中的经典问题之一,广泛应用于拼写纠正、DNA序列比对等领域。通过计算将一个字符串转换为另一个字符串所需的最小操作数,能够帮助我们评估它们之间的相似度。本文将详细分析编辑距离问题的基本思路,提供动态规划的实现方法,并展示 Python 和 C++ 的代码示例。原创 2024-10-08 15:50:58 · 2532 阅读 · 0 评论 -
【LeetCode】动态规划—516. 最长回文子序列(附完整Python/C++代码)
最长回文子序列 问题是动态规划的重要应用之一。在实际生活中,很多信息都可以通过回文子序列来进行抽象和处理。本题旨在通过动态规划的方法,帮助我们有效地找到字符串中的最长回文子序列。本文将详细阐述该问题的思路,包括如何定义状态、推导递推关系,并提供 Python 和 C++ 的实现代码,帮助读者更深入地理解动态规划的应用。原创 2024-10-08 15:39:48 · 1188 阅读 · 0 评论 -
【LeetCode】动态规划—120. 三角形最小路径和(附完整Python/C++代码)
三角形最小路径和 是动态规划问题的经典应用之一。在给定一个三角形数组时,如何从顶部到底部找到最小的路径和?这类问题不仅考验我们的动态规划思维,也要求我们有效地优化空间和时间复杂度。通过自底向上的动态规划方法,我们可以逐层计算出最优解,而不必枚举所有路径。本文将详细介绍如何通过动态规划解决这个问题,结合 Python 和 C++ 实现来帮助你理解每一步的细节和优化过程。原创 2024-09-30 15:20:26 · 1408 阅读 · 0 评论 -
【LeetCode】动态规划—139. 单词拆分(附完整Python/C++代码)
字符串分割问题是算法中非常常见的一类问题,尤其是当给定一个字典,要求判断字符串能否通过字典中的单词进行拼接时。该问题在自然语言处理、文本分析等领域有着广泛应用。本题要求通过词典中的单词将字符串 `s` 完全分割,并判断是否存在这样的分割方式。为了解决该问题,动态规划是一种高效且合理的解决思路。本文将通过动态规划方法来解析这一问题,结合 `Python` 和 `C++` 代码详细讲解每一步的实现,帮助你深入理解此类问题的解决方法。原创 2024-09-30 14:41:13 · 1214 阅读 · 0 评论 -
【LeetCode】动态规划—5. 最长回文子串(附完整Python/C++代码)
回文字符串问题是字符串处理中的经典问题之一,尤其是寻找最长回文子串的问题。回文子串不仅在字符串理论中具有重要意义,还在自然语言处理、DNA序列分析等应用场景中有着广泛的使用。在处理回文子串问题时,动态规划提供了直观且有效的解决方案,可以通过递推公式解决复杂的子问题。本文将介绍如何通过动态规划方法解决最长回文子串问题,并结合 Python 和 C++ 代码详细讲解每一步的实现逻辑。同时,还将展示如何利用中心扩展法来进一步优化空间复杂度,帮助你在面对实际问题时能选择合适的算法策略。原创 2024-09-30 14:00:28 · 2904 阅读 · 0 评论 -
【LeetCode】动态规划—221. 最大正方形(附完整Python/C++代码)
在二维矩阵中寻找最大正方形的问题是动态规划的一个经典应用。这个问题不仅考察我们对二维数组的操作,还需要我们理解如何通过递推公式优化解法。矩阵中的每个元素都可能成为一个正方形的一部分,而我们要做的就是利用之前的计算结果,在矩阵的每个位置处找到能够扩展出的最大正方形。本文将介绍如何通过动态规划方法解决这一问题。我们会逐步分析递推关系,并通过 Python 和 C++ 代码示例展示具体的实现,并在最后总结代码的实现细节。原创 2024-09-30 09:55:32 · 999 阅读 · 0 评论 -
【LeetCode】动态规划—931. 下降路径最小和(附完整Python/C++代码)
在算法的学习中,动态规划是一个至关重要的思想,特别是在解决最优路径问题时,动态规划能够提供一种高效且直观的解决方案。**最小下降路径和问题**就是这样一个经典的动态规划问题。它要求我们在一个二维矩阵中,从第一行的任意一个元素开始,每次只能向下、左下、右下移动,找到通往最后一行的最小路径和。这类问题不仅在理论上具有挑战性,同时也在实际生活中的路径规划、图像处理等领域有广泛应用。原创 2024-09-29 15:32:56 · 948 阅读 · 0 评论 -
【LeetCode】动态规划—63. 不同路径 II(附完整Python/C++代码)
本文将探讨“不同路径 II”这一问题,定义了在一个有障碍物的网格中,从起点到终点的路径数计算方法。我们将从基本概念入手,逐步深入理解问题的递推关系、动态规划的解决方案及其优化方法。通过详细的解释和代码示例,我们希望能帮助读者更好地掌握动态规划的思想与应用,提升解决复杂问题的能力。原创 2024-09-27 12:03:45 · 836 阅读 · 0 评论 -
【LeetCode】动态规划—最小路径和(附完整Python/C++代码)
给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。原创 2024-09-27 10:03:43 · 1141 阅读 · 0 评论 -
【LeetCode】动态规划—不同路径(附完整Python/C++代码)
一个机器人位于一个m∗n网格的左上角(起始点)。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(终点)。问总共有多少条不同的路径?。原创 2024-09-25 16:30:10 · 1409 阅读 · 0 评论