DP
文章平均质量分 60
将待求解问题分解为若干个子问题,按顺序求解子问题,前一子问题的解为后一子问题的求解提供有用的信息,适用于子问题重叠的情况
咩咩_10538769
这个作者很懒,什么都没留下…
展开
-
【动态规划】leetCode309.买卖股票时机含冷冻期 C语言版
给定一个整数数组,其中第i个元素代表了第i天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出: 3解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]dp[i]表示第i天可以获得的最大股票利润,为什么用二维数组表示状态呢,因...原创 2021-11-11 17:38:31 · 157 阅读 · 0 评论 -
【动态规划】leetCode746.使用最小花费爬楼梯(使用滚动数组优化空间)
数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值cost[i](下标从 0 开始)。每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。示例1:输入:cost = [10, 15, 20]输出:15解释:最低花费是从 cost[1] 开始,然后走两步即可到阶梯顶,一共花费 15 。示例 2:输入:...原创 2021-11-03 20:12:26 · 206 阅读 · 0 评论 -
【动态规划C语言】编辑距离问题 原理+代码
【问题描述】设A和B是两个字符串,要用最少的字符操作将字符串A转换为字符串B。这里所说的字符操作包括:(1)删除一个字符;(2)插入一个字符;(3)将一个字符改为另一个字符。将字符串A变换为字符串B所用的最少字符操作数称为字符串A到B的编辑距离,记为d(A,B)。试设计一个有效算法,对任给的两个字符串A和B,计算出它们的编辑距离dp(A,B)。图解如下:第1行:空字符串需要经过多少次变换才可以变成另一个空字符串,显然是0,所以第一空是0空字符串需要经过多少次变换才可以变成字符串原创 2021-10-19 21:39:49 · 1228 阅读 · 0 评论 -
【动态规划C语言】求解最长公共子序列问题(并输出该序列)原理+代码
子序列:给定一个序列X=<x1,x2,x3,x4...,xm>,另一个序列Z=<z1,z2,z3,z4...,zk>,若存在一个严格递增的X的下标序列<i1,i2,i3,...,ik>对所有的1,2,3,...,k,都满足x(ik)=zk,则称Z是X的子序列(不一定要连续但顺序必须相同)那么如何由dp求出LCS呢?(1)当元素值等于上方相邻元素值时i-1,即dp[i][j]=dp[i-1][j](2)当元素值等于左方相邻元素值时j-1,即dp[i][j]=原创 2021-10-19 21:02:57 · 1768 阅读 · 0 评论 -
【动态规划C语言】求解整数拆分问题 原理+代码
原理设f(n,k)为将整数n无序拆分成最多不超过k个数之和的方案个数根据n和k的关系,考虑下面几种情况:(1)当n=1时,不论k的值为多少(k>0),只有一种拆分,即{1}; 显然 f(n,k)=1(2)当k=1时,不论n的值为多少(n>0),只有一种拆分,即{1,1,....1,1,1}; 显然 f(n,k)=1(3)当n=k时,根据拆分中是否包含n,可以分为两种情况: 1.拆分中包含n的情况,只有一个,即{n}; ...原创 2021-10-19 14:44:55 · 4954 阅读 · 1 评论