自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 洛谷P8781 [蓝桥杯 2022 省 B] 修剪灌木

每个位置两次修剪的最大间隔时间由该位置到两端的较远距离决定。所以对于第i棵灌木,左侧距离为i-1,右侧距离为n-i。取两者中的较大值并乘以2,得到该灌木的最大生长时间。如果当n==1时只有一颗,生长最长高度为1,其它则是去左侧距离和右侧距离的较大值并*2。爱丽丝在每天傍晩会修剪一棵灌木,让灌木的高度变为 0 厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始,每天向右修剪一棵灌木。当修剪了最右侧的灌木后,她会调转方向,下一天开始向左修剪灌木。在第一天的早晨, 所有灌木的高度都是 0 厘米。

2025-02-23 21:26:55 426

原创 洛谷P8783 [蓝桥杯 2022 省 B] 统计子矩阵

使用二维前缀和,用 sum[i][j] 表示矩阵中 x∈[1,i],y∈[1,j] 的所有元素之和。其递推式为 sum[i][j]=sum[i−1][j]+sum[i][j−1]−sum[i−1][j−1]+arr[i][j]所以矩阵该矩阵的元素之和就可以用 sum[c][d] - sum[c][b - 1] - sum[a - 1][d] + sum[a - 1][b - 1]对于 100% 的数据, 1≤N,M≤500,0≤Aij​≤1000,1≤K≤2.5×108.大小为 1×1 的有 10 个。

2025-02-23 19:13:35 538

原创 洛谷P8771 [蓝桥杯 2022 省 B] 填空问题

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。则不是一个顺子日期,它一个顺子也没有。小明想知道在整个 2022 年份中,一共有多少个顺子日期。表示法中,存在任意连续的三位数是一个顺子的日期。输入格式输入一个大写字母,表示第几个问题。根据所输入的问题编号,输出对应问题的答案。顺子日期指的就是在日期的。

2025-02-22 19:16:05 456

原创 洛谷P9241 [蓝桥杯 2023 省 B] 飞机降落

飞机只能在到达之后才能开始降落,所以如果上一架飞机降落完成的时间`last`比当前飞机的到达时间`t`晚,那么当前飞机必须等到`last`才能开始降落。反之,如果当前飞机到达时间`t`更晚,那么它需要等到`t`才能开始。其中第 i 架飞机在 Ti​ 时刻到达机场上空,到达时它的剩余油料还可以继续盘旋 Di​ 个单位时间,即它最早可以于 Ti​ 时刻开始降落,最晩可以于 Ti​+Di​ 时刻开始降落。一架飞机降落完毕时,另一架飞机可以立即在同一时刻开始降落,但是不能在前一架飞机完成降落前开始降落。

2025-02-22 12:46:49 902

原创 洛谷P9242 [蓝桥杯 2023 省 B] 接龙数列

对于当前处理的数num,它的首位是s,末位是e。再比如当前num首位为3,末位为7,这时候我们要形成接龙序列,则是看与首位3相同的前面的末尾也是3的数,而在此之前,我们每次记录的都是以数字d结尾的最长接龙序列的长度,与dp[3]相关,dp[3]等于多少则是说明当前数能与前面形成接龙序列长度就为多少再加1,然而末位是7,所以形成的最新接龙序列长度为dp[7] = dp[3] +1。第二个数121的首位是1,末位是1,所以它可以接在last[1]=1后面,形成长度为2的序列,更新last[1]为2。

2025-02-22 10:48:47 1749

原创 洛谷P9240 [蓝桥杯 2023 省 B] 冶炼金属

这个炉子有一个称作转换率的属性 V,V 是一个正整数,这意味着消耗 V 个普通金属 O 恰好可以冶炼出一个特殊金属 X,当普通金属 O 的数目不足 V 时,无法继续冶炼。现在给出了 N 条冶炼记录,每条记录中包含两个整数 A 和 B,这表示本次投入了 A 个普通金属 O,最终冶炼出了 B 个特殊金属 X。思路:从题目中看就是求最大转化率V和最小转化率V,因为题目中说不会累加到下一次,都是独立的记录,所以我们每次先求出第i次的最大转化率和最小转化率,然后同时保存全部的最大最小值。

2025-02-21 13:01:16 396

原创 洛谷P10423 [蓝桥杯 2024 省 B] 填空试题 A: 握手问题

小蓝组织了一场算法交流会议,总共有 50 人参加了本次会议。按照惯例他们每个人都要与除自己以外的其他所有人进行一次握手(且仅有一次)。但有 7 个人,这 7 人彼此之间没有进行握手(但这 7 人与除这 7 人以外的所有人进行了握手)。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。题目及思路:求总共50人握了多少次手,但有7个人之间没有握手,那所以我们先求出50个人握手次数再减去7个人握手次数即可。注意 A 和 B 握手的同时也意味着 B 和 A 握手了,所以算作是一次握手。

2025-02-20 16:31:54 457

原创 C语言实现组合总和问题的深度解析

通过递归搜索所有可能的解,并在找到一个解后回溯,尝试其他可能性。:目标是找到所有可能的组合,使得这些组合的和等于目标值。如果当前路径的和已经超过目标值,或者加上某个值后超过目标值,则可以直接跳过。:递归时需要遍历所有未使用的元素,并将它们加入当前排列。在每一层递归中,尝试从当前索引开始的所有可能值,并允许重复使用相同值。对数组进行排序,可以提前剪枝,避免无效的递归调用。:输出所有可能的排列,每个排列包含数组的所有元素。:输出所有可能的组合,每个组合的和等于目标值。超过目标值时,直接返回,避免无效的递归。

2025-02-18 12:22:16 384

原创 C语言实现字符串全排列的深度解析

递归用于深度优先搜索,回溯用于撤销当前选择,尝试其他可能性。递归用于深度优先搜索,回溯用于撤销当前选择,尝试其他可能性。在每一层递归中,尝试所有未被使用的字符,并标记为已使用,然后进入下一层递归。:在每次递归返回时,撤销当前选择,恢复字符的未使用状态,以便尝试其他可能性。从根节点开始,递归深度为 0,尚未选择任何字符。,尝试选择其他字符(但已无其他选择),继续回溯。在回溯时,撤销当前选择,恢复字符的未使用状态。,回到第二层递归,尝试选择其他字符。,进入第三层递归,选择剩余的字符。为例,进入第二层递归。

2025-02-17 13:58:45 584

原创 动态规划LeetCode-494.目标和

那我们可以把dp[j]的含义表示为装满容量为j有dp[j]种方法。那第二求的背包容量是多少呢?这里是用一维滚动数组来解决,所以物品遍历的for循环放在外层,遍历背包的for循环放在内层,然后题目说物品i只能放一次,所以且内层for循环倒序遍历!dp[j] = dp[j] + dp[j - nums[i]] # 即 dp[j] += dp[j - nums[i]]01背包排列组合问题的递推公式为:dp[j] += dp[j-nums[i]];dp含义:dp[j]表示为装满容量为j有dp[j]种方法。

2025-02-13 21:36:48 968

原创 动态规划LeetCode-1049.最后一块石头的重量Ⅱ

这题不过多讲解,因为思路和416.分割等和子集差不多,主要是最后返回值的那里,分成两堆石头,一堆石头的总重量是dp[target],另一堆就是sum - dp[target]。初始化:背包容量为j=0,物品最大价值为dp[0]=0这个好理解,那其他下标初始化也为0是为什么呢,因为dp数组在递推的过程中取得最大的价值,把下标初始成负无穷小,就不会被初始值覆盖,这里初始为0即可,也是一样的。= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。如果没有石头剩下,就返回 0。

2025-02-12 22:45:09 965

原创 动态规划LeetCode-416.分割等和子集

本题如何转换到01背包问题是关键,我们想一想,题目说分割两个等和子集,那只需要是sum/2得到一个子集的体积,这个sum/2得到的相当于就是一个背包,这个背包体积是sum/2,看nums里面能否把这个背包体积装满,如果能装满,即可以分割等和子集。初始化:背包容量为j=0,物品最大价值为dp[0]=0这个好理解,那其他下标初始化也为0是为什么呢,因为dp数组在递推的过程中取得最大的价值,把下标初始成负无穷小,就不会被初始值覆盖,这里初始为0即可,也是一样的。数组不能分割成两个元素和相等的子集。

2025-02-12 22:12:57 564

原创 动态规划LeetCode-322.零钱兑换

如果dp[2]还是INT_MAX的话,说明用这个硬币的话,无法得到金额2,那么这时候即使加上一个3元的硬币,也无法得到5元,所以这个时候就不能更新dp[5],因为原来的dp[5]可能已经被其他硬币组合更新过,或者还没有被更新过,但此时这个路径是无效的。当j=2时,dp[2 -2]=dp[0]=0,所以dp[2]=0+1=1。然后其他下标值,考虑到递推公式的特性,dp[j]必须初始化为一个最大的数,否则就会在min(dp[j - coins[i]] + 1, dp[j])比较的过程中被初始值覆盖。

2025-02-12 12:58:05 905

原创 动态规划LeetCode-714.买卖股票的最佳时机含手续费

这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。所以在不持有股票的最大利润的时候要减去手续费。这里不过多讲,在买卖股票的最佳时机2基础加的一个手续费而已,思路代码基本一致,所以写这题之前先去写122的买卖股票的最佳时机2,不理解的可以看我的文字。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。这题跟买卖股票的最佳时机2基本一样,交易不限次数,只是多加了一个手续费。

2025-02-11 21:44:05 206

原创 动态规划LeetCode-309.买卖股票的最佳时机含冷冻期

所以dp[i][0] = dp[i-1][0] > dp[i-1][2] - prices[i]?所以 dp[i][2] = dp[i-1][2] > dp[i-1][1]?含冷冻期是一个系列问题,是在一二三四的基础上进行变化的,我们依旧可以沿用之前的动态规划定义的dp含义思想来定义这道题。所以dp[i][1] = dp[i-1][0] + prices[i];

2025-02-11 19:30:22 616

原创 动态规划LeetCode-188.买卖股票的最佳时机4

递推公式的推导思路还是一样的,只是我们要特别注意dp[i][j]用j表示的时候根据j的变化来表示次数,相当于你可以把交易两次的递推公式列出来后寻找规律,就可以得出后面的。那我们来看买卖股票的最佳时机4和3有哪些区别,3是让你买卖股票但至多只可以交易两次,所以我们定义的时候具体把第一次第二次持有和不持有的状态分别列出来,这时候是dp[i][0]~dp[i][4]。在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2。

2025-02-07 15:01:53 594

原创 动态规划LeetCode-123.买卖股票的最佳时机3

dp[i][1]:还未进行第一次买入的时候,我们手上的现金为0,那如果我们要是进行第一次买入,那就是无操作所得的最大现金dp[i][0]减去prices[i]得到第i天第一次持有股票时手上的最大现金,这个与第i-1天的dp[i][1]进行比较取最大值,每天记录保存的是第一次持有股票时手上的最大现金。dp[i][4]:第0天,如果进行第二次不持有,手上的最大现金就是0 - prices[0] + prices[0] - prices[0] + prices[0] = 0,所以dp[0][4] = 0;

2025-02-07 14:38:00 886

原创 动态规划LeetCode-122.买卖股票的最佳时机2

那么第i天持有股票即dp[i][0],如果是第i天买入股票,所得现金就是昨天不持有股票的所得现金减去今天的股票价格 即:(dp[i-1][1] - prices[i])。不是真正的买入卖出,比如买入,求每个dp[i][0]时并不是真正的买入,是持有,因为买入要最低价格的时候买入,我们每个dp[i][0]记录的是持有股票时最低价格,推导是最后dp[pricesSize-1][0]这个值就是真正买入的最低价格。那我们知道1的递推公式:dp[i][0] = dp[i-1][0] > -prices[i]?

2025-02-06 15:17:15 670

原创 动态规划LeetCode-121.买卖股票的最佳时机1

那我们买卖股票的有两种状态,一种是持有一种不持有,所以我们定义二维数组dp[i][0]、和dp[i][1],dp[i][0]表示第i天持有股票时手上所得的最大现金,dp[i][1]表示第i天不持有股票手上所得的最多现金。我们特别要注意一个点是,这里说到“持有”,不代表买入,我们dp[i][0]记录的是注意只是记录,记录第i天持有股票时手上所得的最大现金,而买入是一种结果,买入的话是不是会扣钱,买入某一天的股票则是-prices[i],而是否真正的要买入则要比较,是不是最低价格的买入,以便后续最高利润卖出。

2025-02-05 22:31:14 1638

原创 动态规划LeetCode-121.买卖股票的最佳时机

那我们是不是可以使用动态规划,dp[i]的含义为第i天的最大利润,同时定义一个min_price来记录当前股票的最低价格,这时候dp[i]的值只需要把dp[i-1]和prices[i]-min_price进行比较取最大值(prices[i]-min_price已经求出当天i得到的最大利润,但还要和dp[i-1]进行比较,每个位置保存的都是最大的利润,最后返回dp[i-1]即可),同时进行prices[i]与min_price的比较,更新min_price一直为当前股票的最低价格。买入这只股票,并选择在。

2025-02-05 14:39:13 699

原创 动态规划LeetCode-1035.不相交的线

动规五部曲(dp含义、递推公式、初始化、遍历顺序、打印数组) ,主要的就是把大问题拆解成小问题,小问题的值保存下来,从小问题的答案推导到最终答案,空间换时间。可以画出两条不交叉的线,如上图所示。但无法画出第三条不相交的直线,因为从 nums1[1]=4 到 nums2[2]=4 的直线将与从 nums1[2]=2 到 nums2[1]=2 的直线相交。做这题之前先去做1143.最长公共子序列,这题求的思路是一样的,代码也几乎一样,这题主要的是知道求最长公共子序列和如何把这题传化为求最长公共子序列的思路。

2025-02-04 22:54:42 314

原创 动态规划LeetCode-1143.最长公共子序列

题目及思路:这题运用动态规划的思想,大问题拆解成小问题,求的是最长公共子序列,那我们可以求每个text1的前i个字符和text2的前j个字符之间的最长公共子序列(LCS)的长度。我们通过双重循环遍历每个字符组合,每遍历到i,j位置,dp[i][j]求的就是text1的前i个字符和text2的前j个字符之间的最长公共子序列(LCS)的长度。dp含义:dp[i][j]的含义是text1的前i个字符和text2的前j个字符之间的最长公共子序列(LCS)的长度。最长公共子序列是 "ace" ,它的长度为 3。

2025-02-04 21:45:28 432

原创 动态规划+哈希LeetCode-1027.最长等差数列

题目及思路:大问题是求最长等差数列,那我们可以拆解成小问题,求出每个下标i位置的能构成的最长等差数列,使用双重循环遍历每个i和j<i的情况,检查是否能将nums[i]接在nums[j]后面形成更长的等差数列,从而更新dp[i]的值。但我们想到在这过程中会出现不同的公差然后构成等差数列,所以我们需要用到二维数组dp[i][d]表示以第i个元素结尾、公差为d的最长等差子序列的长度。递推公式:dp[i][d] = dp[i][d] > dp[j][d] + 1?

2025-02-04 16:46:39 228

原创 动态规划+哈希LeetCode-1218.最长定差子序列

题目及思路:这题 一开始我把dp[i]的含义定义为arr数组每个位置i所能形成的最长定差子序列长度,想的是使用双重循环遍历每个i和j<i的情况,检查是否能将arr[i]接在arr[j]后面形成更长的定差子序列,从而更新dp[i]的值,但这样时间复杂度是O(n²),导致超时。然而c语言没有直接能使用哈希表,所以我们可以创建dp数组dp[num],其中的num就是键值,这里的键值代表每个数值,dp[num]所得到的值表示以值。中最长等差子序列的长度,该子序列中相邻元素之间的差等于。结尾的最长等差子序列长度。

2025-02-04 12:45:07 322

原创 动态规划LeetCode-646.最长数链对

这题要求的是最长数对链,那我们可以定义一个dp数组,dp[i]含义为下标i的数对所能够形成的最长数对链的长度。所以我们可以推出递推公式,过遍历 j < i 的所有元素,检查是否能将 pairs[i] 接在 pairs[j] 后面形成更长的数链对,从而更新 dp[i] 的值,而形成数链对的定义是pairs[i][0] > pairs[j][1],形成说明dp[i]=dp[j]+1,但还要跟原本的dp[i]比较,取最大值。最长的数对链是 [1,2] -> [4,5] -> [7,8]。

2025-02-03 21:43:10 236

原创 动态规划LeetCode-673.最长递增子序列的个数

就比如300. 最长递增子序列的示例1,dp[i]存的是以nums[i]为结尾的最长子序列长度,示例1最长长度是dp[6]=4,而得到长度4的子序列有两种不同路径(2,3,7,101)和(2,5,7,101)。count[i]的含义:以nums[i]为结尾、长度为dp[i]的最长递增子序列的个数。它的更新逻辑与 dp[i] 同步: if当发现更长的子序列(dp[j] + 1 > dp[i])时,count[i] 需要继承 count[j] 的值,因为这是当前找到的最优路径。

2025-02-03 14:01:49 1791

原创 动态规划LeetCode-300.最长递增子序列

此题是求序列中最长的子序列,那所以我们需要求出每个子序列的长度,而我们用了dp之后就会保存符合题目的值 ,就不用重复计算。所以我们dp[i]的含义为以nums[i]为结尾的最长递增子序列长度。来进行解题,动规五部曲(dp含义、递推公式、初始化、遍历顺序、打印数组) ,主要的就是把大问题拆解成小问题,小问题的值保存下来,从小问题的答案推导到最终答案,空间换时间。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。dp含义:dp[i]的含义为以nums[i]为结尾的最长递增子序列长度。

2025-02-02 18:10:05 617

原创 动态规划LeetCode-712.两个字符串的最小ASCII删除和

这题是两个字符串的最小ASCII删除和,则要两个指针i,j分别对应两个字符串,两个字符串都可以进行删除,则我们把dp[i][j]定义为s1的前i个字符删除转换成s2的前j个字符所需要的最小ASCII删除和或者是s2的前j个字符删除转换成s1的前i个字符所需要的最小ASCII删除和。初始化:dp[0][0]=0,空字符转换成空字符所需要的最小ASCII删除和是0,看第一列dp[i][0] 表示将 s1 的前 i 个字符变成空字符串所需的最小ASCII删除和,这等于 s1 前 i 个字符的ASCII值之和。

2025-02-02 13:50:42 648

原创 动态规划LeetCode-72.编辑距离

这题是编辑距离的最少次数,我们把dp[i][j]的含义为:word1的前i个字符编辑转换成word2的前j个字符所需要的最少次数。初始化:(0,0)为空字符,所以dp[0][0]等于0,第一行空字符word1组成word2的则是一直插入的操作,所以dp[0][j] = j;来进行解题,动规五部曲(dp含义、递推公式、初始化、遍历顺序、打印数组) ,主要的就是把大问题拆解成小问题,小问题的值保存下来,从小问题的答案推导到最终答案,空间换时间。horse -> rorse (将 'h' 替换为 'r')

2025-02-02 02:21:21 705

原创 动态规划LeetCode-139.单词拆分

这题dp[i]的含义是下标i前的字母所组成的子串是否能匹配字典里单词,所以我们需要从头到尾依次判断每个子串能否匹配字典里的单词,并记录在dp数组中。初始化:dp[0]=true,这里不能初始化为false,要不然后面dp数组也全是false了。dp[0]是指一个长度为0的字符串,题目给的字符串s长度是大于等于1的,所以dp[0]在这里没有确切的含义,dp[0]完全就是为了我们递推公式,是递推公式的一个基础。dp含义:dp[i]的含义是下标i前的字母所组成的子串是否能匹配字典里单词,注意是下标i前。

2025-02-01 18:05:28 240

原创 动态规划LeetCode-221.最大正方形

那这个格子如何求dp值呢,此题dp的含义是以(i,j)为正方形的右下角能组成的最大正方形边长。那要求dp值是不是看受谁影响,比如此时坐标(i,j),要组成正方形看的是(i,j)这个格子的另外(i,j-1)、(i-1,j)、(i-1,j-1)这三个格子,为什么求这三个的最小值呢,就好比木桶原理,其余两个木板再长,有一个木板短,水也只能装到短木板的那个位置,所以到这里,以(i,j)为正方形的右下角,那看其他三个与(i,j)能组成的最大正方形即是看dp最小值,最后再加上自己的正方形边长1。

2025-01-30 14:18:41 287

原创 动态规划LeetCode-931.下降路径最小和

题目及思路:做到这题可以先去做LeetCode-120.三角形最小路径和,做完120.三角形最小路径和这题就可以轻松解决LeetCode-931.下降路径最小和,思路是一样的,就是dp[i][j]所受影响值变为三个,还需注意边界问题就可以通过。递推公式:min(dp[i+1][j],dp[i+1][j-1],dp[i+1][j+1])+ matrix[i][j] 就是比较受到影响的三个dp值然后再加上自己本身matrix[i][j]的值,但要注意边界问题。

2025-01-29 19:35:56 128

原创 动态规划LeetCode-120.三角形最小路径和

此题相邻的结点是指比如此时是(i,j),而它相邻节点则为(i+1,j)和(i+1,j+1),所以dp(i,j)的值所受到(i+1,j)和(i+1,j+1)的影响。求dp[i][j]最小值则要dp[i][j] = (dp[i+1][j] < dp[i+1][j+1]?递推公式:dp[i][j] = (dp[i+1][j] < dp[i+1][j+1]?

2025-01-29 18:21:23 179

原创 动态规划力扣64.最小路径和

题目及思路:此题寻找的是最小路径和,它只能向下或向右走,使用dp动态规划的话我们就可以转化为求到达每一格的最小路径和,每一格dp(i,j)的值是受到dp(i-1,j)、dp(i,j-1)的影响,求最小所以看dp(i-1,j)、dp(i,j-1)哪个比较小再加上当前grid(i,j)值。递推公式:dp[i][j] = (dp[i-1][j] < dp[i][j-1]?初始化:dp初始化第0行和第0列,当前值加上上一个格子的dp值。

2025-01-29 10:51:27 328

原创 动态规划力扣63.不同路径||

此题可以用动态规划来进行解题,动规五部曲(dp含义、递推公式、初始化、遍历顺序、打印数组)递推公式:dp[i][j] = dp[i-1][j] + dp[i][j-1]打印数组:当遇到疑惑或者提交错误时,打印数组出来比较快速的看看哪一步有错。初始化:初始化第0行和第0列,遇到障碍物的那个格子以及之后都是0。遍历顺序:二维数组的从左往右,从上往下。dp含义:每个格子的不同路径总和。

2025-01-27 16:23:26 226

原创 动态规划力扣62.不同路径

理解题目及思路:此题注意要求的是路径而不是步数,我们dp[i][j]的含义就是到达每个格子的总共不同路径,我们分析一下图并得出规律,因为只能向下和向右走,所以可以看出(i,j)这个格子的不同路径关乎到的是上面的格子和左边的格子,求坐标(i,j)的总共不同路径dp[i][j]则是dp[i-1][j] + dp[i][j-1]。此题可以用动态规划来进行解题,动规五部曲(dp含义、递推公式、初始化、遍历顺序、打印数组)递推公式:dp[i][j] = dp[i-1][j] + dp[i][j-1]

2025-01-27 14:46:44 216

原创 动态规划力扣198.打家劫舍

理解题目和思路:不能偷相邻,dp[i],我们可以求到每个房屋i时总共最多可以偷多少,所以要考虑到i时偷不偷,如果偷,则dp[i-2]+nums[i](不能偷相邻,所以偷的话nums[i]加上i-2屋子所偷到的金币),如果不偷则dp[i-1];初始化:dp[i]是指在第i个屋子所能偷到的最多金币,所以dp[0] = nums[0],dp[1] = max(nums[1],nums[0])递推公式:dp[i] = max(dp[i-2] + nums[i] , dp[i-1])

2025-01-26 12:02:18 209

原创 动态规划力扣749.使用最小花费爬楼梯

此题要注意的两点是其一跳上去了才花费,就比如此时在1台阶,你需要跳上去才要花费cost[1]。递推公式:dp[i] = min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]),此时就有人会疑问为什么是dp+cost,因为是要跳上去,则是当前的花费dp加上跳上去需要的花费cost。初始化:只需要dp[0] = dp[1] = 0,因为题目说可以在下标0或者1出发。dp[i]含义:i是楼梯阶层,dp[i]是到达此楼梯的最小花费。此题是一道动态规划题目。遍历顺序:从前往后。

2025-01-26 10:49:55 150

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除