下面是c++的一些dp经典的30道题。
编者不易,请点个赞多多包涵
-
题目:斐波那契数列
- 描述:计算第 n 个斐波那契数。
- 做法:递归、动态规划(记忆化搜索或迭代)。
- 难度:简单。
- 来源:经典动态规划入门题目。
-
题目:最长递增子序列
- 描述:找到给定数组的最长递增子序列长度。
- 做法:动态规划、贪心算法、二分查找。
- 难度:中等。
- 来源:LeetCode 300题。
-
题目:0-1 背包问题
- 描述:给定物品重量和价值,求在给定容量下能装的最大价值。
- 做法:动态规划(0-1 背包问题)。
- 难度:中等。
- 来源:经典动态规划问题。
-
题目:最大子序列和
- 描述:找到给定数组中连续子数组的最大和。
- 做法:动态规划。
- 难度:简单。
- 来源:LeetCode 53题。
-
题目:爬楼梯
- 描述:有 n 阶楼梯,每次可以爬 1 或 2 阶,求有多少种不同的爬法。
- 做法:动态规划、斐波那契数列递推公式。
- 难度:简单。
- 来源:经典动态规划问题。
-
题目:编辑距离
- 描述:计算将一个字符串转换成另一个字符串的最少操作次数(插入、删除、替换)。
- 做法:动态规划。
- 难度:困难。
- 来源:LeetCode 72题。
-
题目:最长公共子序列
- 描述:求两个字符串的最长公共子序列长度。
- 做法:动态规划。
- 难度:中等。
- 来源:LeetCode 1143题。
-
题目:背包问题 - 完全背包
- 描述:求在给定容量下能装的最大价值。
- 做法:动态规划(完全背包问题)。
- 难度:中等。
- 来源:经典动态规划问题。
-
题目:打家劫舍
- 描述:不能连续偷两个房屋,求能偷到的最大财产值。
- 做法:动态规划。
- 难度:简单。
- 来源:LeetCode 198题。
-
题目:最佳买卖股票时机含冷冻期
- 描述:不能连续偷两个房屋,含冷冻期,求能偷到的最大财产值。
- 做法:动态规划。
- 难度:中等。
- 来源:LeetCode 309题。
-
题目:最大正方形
- 描述:在由 0 和 1 组成的矩阵中找到只包含 1 的最大正方形,并返回其面积。
- 做法:动态规划,构建状态转移方程。
- 难度:中等。
- 来源:LeetCode 221题。
-
题目:单词拆分
- 描述:给定一个非空字符串和一个包含非空单词列表的字典,判断字符串是否可以被拆分为字典中的单词。
- 做法:动态规划,构建状态转移方程。
- 难度:中等。
- 来源:LeetCode 139题。
-
题目:零钱兑换 II
- 描述:给定不同面额的硬币和一个总金额,计算可以凑成总金额的组合数。
- 做法:动态规划,构建状态转移方程。
- 难度:中等。
- 来源:LeetCode 518题。
-
题目:最大子数组乘积
- 描述:找到给定整数数组中乘积最大的连续子数组。
- 做法:动态规划,记录最大正数和最小负数乘积。
- 难度:中等。
- 来源:LeetCode 152题。
-
题目:分割等和子集
- 描述:判断一个非空数组是否可以分割成两个元素和相等的子集。
- 做法:动态规划,背包问题的变种。
- 难度:中等。
- 来源:LeetCode 416题。
-
题目:最长有效括号
- 描述:给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的有效(格式正确且连续)括号子串的长度。
- 做法:动态规划,记录以当前字符结尾的有效括号子串长度。
- 难度:困难。
- 来源:LeetCode 32题。
-
题目:矩阵中的最长递增路径
- 描述:在矩阵中找到最长的递增路径的长度。
- 做法:动态规划,记忆化搜索。
- 难度:困难。
- 来源:LeetCode 329题。
-
题目:最小路径和
- 描述:在一个包含非负整数的 m x n 网格中,找到一条从左上角到右下角的路径,使得路径上的数字总和最小。
- 做法:动态规划,构建状态转移方程。
- 难度:中等。
- 来源:LeetCode 64题。
-
题目:打家劫舍 II
- 描述:房屋围成一圈,不能连续偷两个房屋,求能偷到的最大财产值。
- 做法:动态规划。
- 难度:中等。
- 来源:LeetCode 213题。
-
题目:最长有效括号
- 描述:给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的有效(格式正确且连续)括号子串的长度。
- 做法:动态规划,记录以当前字符结尾的有效括号子串长度。
- 难度:困难。
- 来源:LeetCode 32题。
-
题目:解码方法 II
- 描述:给定一个包含数字和 ‘*’ 的非空字符串,计算解码方法的总数。
- 做法:动态规划,考虑 * 可以表示的情况。
- 难度:困难。
- 来源:LeetCode 639题。
-
题目:石子游戏 VII
- 描述:两个玩家轮流从数组的两端取石子,每次取走的石子点数之和变为他们得分。求先手玩家最多能获得的分数差。
- 做法:动态规划,记录分数差。
- 难度:中等。
- 来源:LeetCode 1690题。
-
题目:单词拆分 II
- 描述:给定一个非空字符串和一个包含非空单词列表的字典,返回所有可能的拆分方案。
- 做法:动态规划 + 回溯算法。
- 难度:困难。
- 来源:LeetCode 140题。
-
题目:连续子数组的最大和 III
- 描述:找到 K 个不重叠的子数组,使这 K 个子数组的和最大。
- 做法:动态规划,考虑不同状态下的最大和。
- 难度:困难。
- 来源:LeetCode 410题。
-
题目:戳气球
- 描述:戳破气球后得到的金币数,求能得到的最多金币数。
- 做法:动态规划,考虑状态转移方程。
- 难度:困难。
- 来源:LeetCode 312题。
-
题目:将数组拆分成斐波那契序列
- 描述:将给定数组拆分成斐波那契式的序列,返回拆分的结果。
- 做法:动态规划 + 回溯算法。
- 难度:中等。
- 来源:LeetCode 842题。
-
题目:目标和
- 描述:给定一个非负整数数组和一个目标值 S,求最多可以通过给定数组中元素之间添加 ‘+’ 或 ‘-’ 得到目标值的方法数。
- 做法:动态规划。
- 难度:中等。
- 来源:LeetCode 494题。
-
题目:石子游戏 V
- 描述:两个玩家轮流从数组的两端取石子,每次取走的石子点数之和变为他们得分。求先手玩家最多能获得的分数差。
- 做法:动态规划,记录分数差。
- 难度:困难。
- 来源:LeetCode 877题。
-
题目:分割数组的最大值
- 描述:将数组分割为 M 个非空连续子数组,使得各个子数组中的最大值的最小值最大。
- 做法:动态规划,二分查找。
- 难度:困难。
- 来源:LeetCode 410题。
-
题目:最佳观光组合
- 描述:给定数组 A,求 i 和 j 之间的 A[i] + A[j] + i - j 的最大值。
- 做法:动态规划,记录最大值。
- 难度:中等。
- 来源:LeetCode 1014题。
好的,继续给您添加更多动态规划相关的题目:
-
题目:最大矩形
- 描述:在由 0 和 1 组成的矩阵中,找到只包含 1 的最大矩形面积。
- 做法:动态规划 + 单调栈。
- 难度:困难。
- 来源:LeetCode 85题。
-
题目:最长回文子序列
- 描述:找到给定字符串的最长回文子序列长度。
- 做法:动态规划,构建状态转移方程。
- 难度:中等。
- 来源:LeetCode 516题。
-
题目:最长湍流子数组
- 描述:找到数组中最长的湍流子数组的长度。
- 做法:动态规划,记录状态变化。
- 难度:中等。
- 来源:LeetCode 978题。
-
题目:使用最小花费爬楼梯
- 描述:每次可以爬一阶或两阶楼梯,每个楼梯都有对应的花费,求到达顶部的最小花费。
- 做法:动态规划,记录状态转移。
- 难度:简单。
- 来源:LeetCode 746题。
-
题目:分割等和子集
- 描述:判断一个非空数组是否可以分割成两个元素和相等的子集。
- 做法:动态规划,背包问题的变种。
- 难度:中等。
- 来源:LeetCode 416题。
-
题目:不同路径
- 描述:在 m x n 网格中,从左上角到右下角共有多少条不同的路径。
- 做法:动态规划,构建状态转移方程。
- 难度:中等。
- 来源:LeetCode 62题。
-
题目:戳气球
- 描述:戳破气球后得到的金币数,求能得到的最多金币数。
- 做法:动态规划,考虑状态转移。
- 难度:中等。
- 来源:LeetCode 312题。
-
题目:整数拆分
- 描述:将正整数拆分为至少两个正整数的和,使得这些整数的乘积最大。
- 做法:动态规划,考虑状态转移。
- 难度:中等。
- 来源:LeetCode 343题。
-
题目:乘积最大子数组
- 描述:找到给定整数数组中乘积最大的连续子数组。
- 做法:动态规划,记录最大正数和最小负数乘积。
- 难度:中等。
- 来源:LeetCode 152题。
-
题目:最低票价
- 描述:给定一系列日期和对应的票价,找出最低的票价让旅行计划成行。
- 做法:动态规划,记录最小花费。
- 难度:中等。
- 来源:LeetCode 983题。