动态规划
文章平均质量分 74
yuzhang_zy
现在的我不是最好的我,未来的我才是最好的我,每一篇博客都记录着我的成长
展开
-
282 石子合并(区间dp)
1. 问题描述:设有 N 堆石子排成一排,其编号为 1,2,3,…,N。每堆石子有一定的质量,可以用一个整数来描述,现在要将这 N 堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。例如有 4 堆石子分别为 1 3 5 2, 我们可以先合并 1、2 堆,代价为 4,得到 4 5 2, 又合并 1,2 堆,代价为 9,得到 9 2 ,再合并得到 11,总代价为 4+9+11=24;如果第原创 2021-09-25 11:38:06 · 158 阅读 · 0 评论 -
524 愤怒的小鸟(状态压缩dp-集合式状态压缩dp)
1. 问题描述:Kiana 最近沉迷于一款神奇的游戏无法自拔。简单来说,这款游戏是在一个平面上进行的。 有一架弹弓位于 (0,0) 处,每次 Kiana 可以用它向第一象限发射一只红色的小鸟, 小鸟们的飞行轨迹均为形如 y=ax ^ 2+b ^ x 的曲线,其中 a,b 是 Kiana 指定的参数,且必须满足 a < 0。当小鸟落回地面(即 x 轴)时,它就会瞬间消失。在游戏的某个关卡里,平面的第一象限中有 n 只绿色的小猪,其中第 i 只小猪所在的坐标为 (xi,yi)。 如果某只小鸟的飞行轨迹原创 2021-09-24 22:06:47 · 215 阅读 · 0 评论 -
292 炮兵阵地(状态压缩dp)
1. 问题描述:2. 思路分析:3. 代码如下:python滚动数组优化:class Solution: # 判断当前是否存在位置是否存在两个连续的1或者三个连续的1 def check(self, sta: int, k: int): for i in range(k): if (sta >> i & 1) and (sta >> i + 1 & 1 or sta >> i原创 2021-09-23 17:49:58 · 328 阅读 · 0 评论 -
1058 股票买卖 V(状态机模型)
1. 问题描述:给定一个长度为 N 的数组,数组中的第 i 个数字表示一个给定股票在第 i 天的价格。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。输入格式第一行包含整数 N,表示数组长度。第二行包含 N 个不超过 10000 的正整数,表示完整的数组。输出格式输出一个整数,表示最大利润。数据范围1 ≤ N原创 2021-09-19 17:38:17 · 259 阅读 · 0 评论 -
187 导弹防御系统(最长上升子序列 + dfs)
1. 问题描述:为了对抗附近恶意国家的威胁,R 国更新了他们的导弹防御系统。一套防御系统的导弹拦截高度要么一直 严格单调上升要么一直严格单调 下降。例如,一套系统先后拦截了高度为 3 和高度为 4 的两发导弹,那么接下来该系统就只能拦截高度大于 4 的导弹。给定即将袭来的一系列导弹的高度,请你求出至少需要多少套防御系统,就可以将它们全部击落。输入格式输入包含多组测试用例。对于每个测试用例,第一行包含整数 n,表示来袭导弹数量。第二行包含 n 个不同的整数,表示每个导弹的高度。当输入测试用例 n=原创 2021-09-17 16:36:33 · 290 阅读 · 0 评论 -
1014 登山(最长上升子序列扩展)
1. 问题描述:五一到了,ACM队组织大家去登山观光,队员们发现山上一共有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号。同时队员们还有另一个登山习惯,就是不连续浏览海拔相同的两个景点,并且一旦开始下山,就不再向上走了。队员们希望在满足上面条件的同时,尽可能多的浏览景点,你能帮他们找出最多可能浏览的景点数么?输入格式第一行包含整数N,表示景点数量。第二行包含N个整数,表示每个景点的海拔。输出格式输出一个整数,表示最多能浏览的景点数。数据范原创 2021-09-16 19:08:01 · 298 阅读 · 0 评论 -
1017 怪盗基德的滑翔翼(最长上升子序列扩展)
1. 问题描述:怪盗基德是一个充满传奇色彩的怪盗,专门以珠宝为目标的超级盗窃犯。而他最为突出的地方,就是他每次都能逃脱中村警部的重重围堵,而这也很大程度上是多亏了他随身携带的便于操作的滑翔翼。有一天,怪盗基德像往常一样偷走了一颗珍贵的钻石,不料却被柯南小朋友识破了伪装,而他的滑翔翼的动力装置也被柯南踢出的足球破坏了。不得已,怪盗基德只能操作受损的滑翔翼逃脱。假设城市中一共有N幢建筑排成一条线,每幢建筑的高度各不相同。初始时,怪盗基德可以在任何一幢建筑的顶端。他可以选择一个方向逃跑,但是不能中途改变方向(原创 2021-09-16 11:59:44 · 570 阅读 · 0 评论 -
895 最长上升子序列
1. 问题描述:给定一个长度为 N 的数列,求数值严格单调递增的子序列的长度最长是多少。输入格式第一行包含整数 N。第二行包含 N 个整数,表示完整序列。输出格式输出一个整数,表示最大长度。数据范围1 ≤ N ≤ 1000,−10 ^ 9 ≤ 数列中的数 ≤ 10 ^ 9输入样例:73 1 2 1 8 5 6输出样例:4来源:https://www.acwing.com/problem/content/description/897/2. 思路分析:原创 2021-09-16 09:49:03 · 159 阅读 · 0 评论 -
746 使用最小花费爬楼梯(递推)
1. 问题描述:数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值cost[i](下标从 0 开始)。每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。示例1:输入:cost = [10, 15, 20]输出:15解释:最低花费是从 cost[1] 开始,然后走两步即可到阶梯顶,一共花费 15 。示例 2:输入..原创 2021-09-07 11:23:57 · 178 阅读 · 0 评论 -
740 删除并获得点数(递推)
1. 问题描述:给你一个整数数组nums,你可以对它进行一些操作。每次操作中,选择任意一个nums[i],删除它并获得nums[i]的点数。之后,你必须删除所有等于nums[i] - 1 和 nums[i] + 1的元素。开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。示例 1:输入:nums = [3,4,2]输出:6解释:删除 4 获得 4 个点数,因此 3 也被删除。之后,删除 2 获得 2 个点数。总共获得 6 个点数。示例2:输入:nu...原创 2021-09-06 12:11:47 · 204 阅读 · 0 评论 -
714 买卖股票的最佳时机含手续费(状态机dp)
1. 问题描述:给定一个整数数组prices,其中第i个元素代表了第i天的股票价格 ;整数fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。示例 1:输入:prices = [1, 3, 2, 8, 4, 9], fee = 2输出:8解释:能够达到的最大利润: 在此处...原创 2021-08-22 10:05:37 · 204 阅读 · 0 评论 -
712 两个字符串的最小ASCII删除和(最长公共子序列)
1. 问题描述:给定两个字符串s1, s2,找到使两个字符串相等所需删除字符的ASCII值的最小和。示例 1:输入: s1 = "sea", s2 = "eat"输出: 231解释: 在 "sea" 中删除 "s" 并将 "s" 的值(115)加入总和。在 "eat" 中删除 "t" 并将 116 加入总和。结束时,两个字符串相等,115 + 116 = 231 就是符合条件的最小和。示例2:输入: s1 = "delete", s2 = "leet"输出: 403解释: .原创 2021-08-21 15:45:42 · 223 阅读 · 0 评论 -
689 三个无重叠子数组的最大和(动态规划-递推)
1. 问题描述:给定数组nums由正整数组成,找到三个互不重叠的子数组的最大和。每个子数组的长度为k,我们要使这3*k个项的和最大化。返回每个区间起始索引的列表(索引从 0 开始)。如果有多个结果,返回字典序最小的一个。示例:输入: [1,2,1,2,6,7,5,1], 2输出: [0, 3, 5]解释: 子数组 [1, 2], [2, 6], [7, 5] 对应的起始索引为 [0, 3, 5]。我们也可以取 [2, 1], 但是结果 [1, 3, 5] 在字典序上更大。注意:..原创 2021-08-05 21:48:03 · 306 阅读 · 0 评论 -
688 “马”在棋盘上的概率(动态规划-递推)
1. 问题描述:已知一个NxN的国际象棋棋盘,棋盘的行号和列号都是从 0 开始。即最左上角的格子记为(0, 0),最右下角的记为(N-1, N-1)。现有一个 “马”(也译作 “骑士”)位于(r, c),并打算进行K 次移动。如下图所示,国际象棋的 “马” 每一步先沿水平或垂直方向移动 2 个格子,然后向与之相垂直的方向再移动 1 个格子,共有 8 个可选的位置。现在 “马” 每一步都从可选的位置(包括棋盘外部的)中独立随机地选择一个进行移动,直到移动了K次或跳到了棋盘外面。求移动...原创 2021-08-05 16:53:37 · 459 阅读 · 0 评论 -
673 最长递增子序列的个数(动态规划-最长上升子序列)
1. 问题描述:给定一个未排序的整数数组,找到最长递增子序列的个数。示例 1:输入: [1,3,5,4,7]输出: 2解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。示例 2:输入: [2,2,2,2,2]输出: 5解释: 最长递增子序列的长度是1,并且存在5个子序列的长度为1,因此输出5。注意:给定的数组长度不超过 2000 并且结果一定是32位有符号整数。来源:力扣(LeetCode)链接:https://leetcode-.原创 2021-08-03 14:58:03 · 164 阅读 · 0 评论 -
650 只有两个键的键盘(递推、数学-分解质因数)
1. 问题描述:最初在一个记事本上只有一个字符 'A'。你每次可以对这个记事本进行两种操作:Copy All (复制全部) : 你可以复制这个记事本中的所有字符(部分的复制是不允许的)。Paste (粘贴) : 你可以粘贴你上一次复制的字符。给定一个数字n。你需要使用最少的操作次数,在记事本中打印出恰好n个 'A'。输出能够打印出n个 'A' 的最少操作次数。示例 1:输入: 3输出: 3解释:最初, 我们只有一个字符 'A'。第 1 步, 我们使用 Copy All ...原创 2021-07-31 23:19:00 · 150 阅读 · 0 评论 -
629 K个逆序对数组(动态规划)
1. 问题描述:给出两个整数n和k,找出所有包含从1到n的数字,且恰好拥有k个逆序对的不同的数组的个数。逆序对的定义如下:对于数组的第i个和第j个元素,如果满i<j且a[i]>a[j],则其为一个逆序对;否则不是。由于答案可能很大,只需要返回 答案 mod 10 ^ 9+ 7 的值。示例 1:输入: n = 3, k = 0输出: 1解释:只有数组 [1,2,3] 包含了从1到3的整数并且正好拥有 0 个逆序对。示例 2:输入: n =...原创 2021-07-29 12:25:28 · 245 阅读 · 0 评论 -
897 最长公共子序列(模板题)
1. 问题描述:给定两个长度分别为 N 和 M 的字符串 A 和 B,求既是 A 的子序列又是 B 的子序列的字符串长度最长是多少。输入格式第一行包含两个整数 N 和 M。第二行包含一个长度为 N 的字符串,表示字符串 A。第三行包含一个长度为 M 的字符串,表示字符串 B。字符串均由小写字母构成。输出格式输出一个整数,表示最大长度。数据范围1 ≤ N,M ≤ 1000输入样例:4 5acbdabedc输出样例:3来源:https://www.acwing.co.原创 2021-07-25 17:35:15 · 417 阅读 · 0 评论 -
583 两个字符串的删除操作(动态规划-递推)
1. 问题描述:给定两个单词word1和word2,找到使得word1和word2相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。示例:输入: "sea", "eat"输出: 2解释: 第一步将"sea"变为"ea",第二步将"eat"变为"ea"提示:给定单词的长度不超过500。给定单词中的字符只含有小写字母。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/delete-operation-for-t...原创 2021-07-25 15:46:59 · 290 阅读 · 1 评论 -
576 出界的路径数(动态规划-递推)
1. 问题描述:给你一个大小为 m x n 的网格和一个球。球的起始坐标为 [startRow, startColumn] 。你可以将球移到在四个方向上相邻的单元格内(可以穿过网格边界到达网格之外)。你最多可以移动 maxMove 次球。给你五个整数 m、n、maxMove、startRow 以及 startColumn ,找出并返回可以将球移出边界的路径数量。因为答案可能非常大,返回对 10 ^ 9 + 7 取余后的结果。示例 1:输入:m = 2, n = 2, maxMove = 2, s原创 2021-07-24 22:46:25 · 225 阅读 · 0 评论 -
552 学生出勤记录 II(递推-动态规划-枚举技巧)
1. 问题描述:给定一个正整数n,返回长度为 n 的所有可被视为可奖励的出勤记录的数量。 答案可能非常大,你只需返回结果mod 10 ^ 9 + 7的值。学生出勤记录是只包含以下三个字符的字符串:'A' : Absent,缺勤'L' : Late,迟到'P' : Present,到场如果记录不包含多于一个'A'(缺勤)或超过两个连续的'L'(迟到),则该记录被视为可奖励的。示例 1:输入: n = 2输出: 8解释:有8个长度为2的记录将被视为可奖励:"PP" , "AP"..原创 2021-07-23 10:50:00 · 227 阅读 · 4 评论 -
516 最长回文子序列(区间dp)
1. 问题描述: 给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。示例 1:输入:s = "bbbab"输出:4解释:一个可能的最长回文子序列为 "bbbb" 。示例 2:输入:s = "cbbd"输出:2解释:一个可能的最长回文子序列为 "bb" 。提示:1 ............原创 2021-07-18 18:02:10 · 250 阅读 · 1 评论 -
514 自由之路(动态规划)
1. 问题描述:电子游戏“辐射4”中,任务“通向自由”要求玩家到达名为“Freedom Trail Ring”的金属表盘,并使用表盘拼写特定关键词才能开门。给定一个字符串ring,表示刻在外环上的编码;给定另一个字符串key,表示需要拼写的关键词。您需要算出能够拼写关键词中所有字符的最少步数。最初,ring的第一个字符与12:00方向对齐。您需要顺时针或逆时针旋转 ring 以使key的一个字符在 12:00 方向对齐,然后按下中心按钮,以此逐个拼写完key中的所有字符。旋转ring...原创 2021-07-18 10:16:18 · 287 阅读 · 1 评论 -
494 目标和(动态规划)
1. 问题描述:给你一个整数数组 nums 和一个整数 target 。向数组中的每个整数前添加'+' 或 '-' ,然后串联起所有整数,可以构造一个表达式 :例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1" 。返回可以通过上述方法构造的、运算结果等于 target 的不同表达式的数目。示例 1:输入:nums = [1,1,1,1,1], target = 3输出:5解释:一共有 5 种方法让最终目标和为.原创 2021-07-16 12:20:19 · 222 阅读 · 0 评论 -
474 一和零(二维费用的零一背包问题)
1. 问题描述:给你一个二进制字符串数组 strs 和两个整数 m 和 n 。请你找出并返回 strs 的最大子集的大小,该子集中最多有 m 个 0 和 n 个 1 。如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的子集 。示例 1:输入:strs = ["10", "0001", "111001", "1", "0"], m = 5, n = 3输出:4解释:最多有 5 个 0 和 3 个 1 的最大子集是 {"10","0001","1","0"} ,因此答案是 4 。原创 2021-07-09 10:15:02 · 155 阅读 · 0 评论 -
二维费用的零一背包问题(动态规划)
1. 问题描述:有 N 件物品和一个容量是 V 的背包,背包能承受的最大重量是 M。每件物品只能用一次。体积是 vi,重量是 mi,价值是 wi。求解将哪些物品装入背包,可使物品总体积不超过背包容量,总重量不超过背包可承受的最大重量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,M,用空格隔开,分别表示物品件数、背包容积和背包可承受的最大重量。接下来有 N 行,每行三个整数 vi,mi,wi,用空格隔开,分别表示第 i 件物品的体积、重量和价值。输出格式输出一个整数,原创 2021-07-09 09:38:56 · 509 阅读 · 0 评论 -
472 连接词(动态规划-递推)
1. 问题描述:给定一个 不含重复单词的字符串数组 words ,编写一个程序,返回words 中的所有 连接词 。连接词 的定义为:一个字符串完全是由至少两个给定数组中的单词组成的。示例 1:输入:words = ["cat","cats","catsdogcats","dog","dogcatsdog","hippopotamuses","rat","ratcatdogcat"]输出:["catsdogcats","dogcatsdog","ratcatdogcat"]解释:"catsd.原创 2021-07-08 17:58:19 · 238 阅读 · 0 评论 -
446 等差数列划分 II - 子序列(动态规划-递推)
1. 问题描述:如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列。例如,以下数列为等差数列:1, 3, 5, 7, 97, 7, 7, 73, -1, -5, -9以下数列不是等差数列。1, 1, 2, 5, 7数组 A 包含 N 个数,且索引从 0 开始。该数组子序列将划分为整数序列(P0, P1, ..., Pk),满足 0 ≤ P0 < P1 < ... < Pk < N。如果序列 A[P0],A[P1],...,A[Pk-1.原创 2021-07-01 16:52:59 · 263 阅读 · 0 评论 -
377 组合总和 Ⅳ(动态规划-枚举位置)
1. 问题描述:2. 思路分析:3. 代码如下:原创 2021-06-19 16:01:30 · 272 阅读 · 0 评论 -
368 最大整除子集(最长上升子序列-dp逆推方案)
1. 问题描述:2. 思路分析:3. 代码如下:原创 2021-06-18 15:54:28 · 317 阅读 · 1 评论 -
354 俄罗斯套娃信封问题(最长上升子序列)
1. 问题描述:给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。注意:不允许旋转信封。示例 1:输入:envelopes = [[5,4],[6,4],[6,7],[2,3]]输出:3解释:最多信封的个数为 3, 组合原创 2021-06-16 10:31:53 · 232 阅读 · 0 评论 -
338 比特位计数(动态规划-递推)
1. 问题描述:给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。示例 1:输入: 2输出: [0,1,1]示例2:输入: 5输出: [0,1,1,2,1,2]进阶:给出时间复杂度为O(n*sizeof(integer))的解答非常容易。但你可以在线性时间O(n)内用一趟扫描做到吗?要求算法的空间复杂度为O(n)。你能进一步完善解法吗?要求在C++或任何其他语言中不使用任何内置函数(如 C.原创 2021-06-13 21:01:15 · 235 阅读 · 0 评论 -
334 递增的三元子序列(动态规划-最长上升子序列)
1. 问题描述:给你一个整数数组nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k)且满足 i < j < k ,使得nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。示例 1:输入:nums = [1,2,3,4,5]输出:true解释:任何 i < j < k 的三元组都满足题意示例 2:输入:nums = [5,4,3,2,1]输...原创 2021-06-11 20:14:47 · 360 阅读 · 0 评论 -
282 石子合并(区间dp)
1. 问题描述:设有 N 堆石子排成一排,其编号为 1,2,3,…,N。每堆石子有一定的质量,可以用一个整数来描述,现在要将这 N 堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。例如有 4 堆石子分别为 1 3 5 2, 我们可以先合并 1、2 堆,代价为 4,得到 4 5 2, 又合并 1,2 堆,代价为 9,得到 9 2 ,再合并得到 11,总代价为 4+9+11=24;如果第原创 2021-06-07 22:20:21 · 195 阅读 · 0 评论 -
第十二届蓝桥杯国赛最小权值(递推)
1. 问题描述:对于一棵有根二叉树 T,小蓝定义这棵树中结点的权值 W(T) 如下:空子树的权值为 0。如果一个结点 v 有左子树 L, 右子树 R,分别有 C(L) 和 C(R) 个结点,则W(v) = 1 + 2W(L) + 3W(R) + (C(L))2 C(R)。树的权值定义为树的根结点的权值。小蓝想知道,对于一棵有 2021 个结点的二叉树,树的权值最小可能是多少?2. 思路分析:分析题目可以知道2021个节点的二叉树的形态是具有很多种的,我们需要在节点数为2021的所有二叉树中找原创 2021-06-06 22:32:12 · 1388 阅读 · 0 评论 -
309 最佳买卖股票时机含冷冻期(状态机dp)
1. 问题描述:给定一个整数数组,其中第i个元素代表了第i天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出: 3解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]来源:力扣(LeetCode)链接:https://leet...原创 2021-06-01 15:37:53 · 203 阅读 · 0 评论 -
完全背包(动态规划)
1. 问题描述:有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。第 i 种物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 种物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<vi,wi≤1000输入样原创 2021-05-21 20:37:47 · 205 阅读 · 0 评论 -
221 最大正方形(暴力、动态规划)
1. 问题描述:在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入:1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximal-square2. 思路分析:① 首先是可以使用...原创 2020-04-01 22:15:29 · 386 阅读 · 0 评论 -
213 打家劫舍 II(动态规划 一个环中若干个不相邻点的最大和)
1. 问题描述:你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下 ,能够偷窃到的最高金额。示例1:输入:nums = [2,3,2]输出:3解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因.原创 2021-05-09 17:33:22 · 352 阅读 · 0 评论 -
windy数(数位dp)
1. 问题描述:windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,在A和B之间,包括A和B,总共有多少个windy数?输入格式包含两个整数,A B。输出格式一个整数输入输出样例输入1 10输出9输入25 50输出20数据范围100%的数据,满足 1 <= A <= B <= 2000000000 。来源:https://www.acwing.com/activity/content/11/原创 2021-05-06 20:36:15 · 1121 阅读 · 3 评论