算法
文章平均质量分 84
Geometry Fu
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
动态规划DP 状态机模型 题型分析 例题应用(股票买卖5) C++完整代码
对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出],第一笔交易可得利润 2-1 = 1,第二笔交易可得利润 2-0 = 2,共得利润 1+2 = 3。f[i][0,1,2] 表示所有前i天,当前状态为手中有股票/手中无股票第1天/手中无股票大于等于2天,的所有选法中的最大利润。共有三种可能出现的情况,手中有股票,手中无股票第1天,手中无股票大于等于2天,分别用0,1,2表示。第一天时,可以买入股票,相当于手中无股票大于等于2天,为状态计算的入口。可以卖出股票,进入手中无股票的第1天(1);原创 2025-02-19 19:17:58 · 1031 阅读 · 0 评论 -
动态规划DP 状态机模型(模型分析+例题讲解:股票买卖)
随后,在第 5 天 (股票价格 = 0) 的时候买入,在第 6 天 (股票价格 = 3) 的时候卖出, 这笔交易所能获得利润 = 3-0 = 3。题目中,一次买入卖出合为一笔交易,也就是说,只有又一次进行买入时,为下一次交易,对应上述状态计算中,只有由手中无货时买入股票计算得到手中有货状态时,才为。样例1:在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2。可以保持,股票仍在手中/1。可以买入,转为手中有货/1;原创 2025-02-19 18:20:54 · 826 阅读 · 0 评论 -
动态规划DP 状态机 模型分析 题目应用 大盗阿福 C++完整代码
选择第i家商店,则一定要求不选择前一家i-1商店(保证不抢劫相邻的两家商店),则计算方程为f[i-2]+w[i];对于第二组样例,阿福选择第1和4家店铺行窃,获得的现金数量为10+14=24。不选择第i家商店,则即从前i-1家商店中选择,则计算方程为f[i-1]。第二行是 N 个被空格分开的正整数,表示每一家店铺中的现金数量。f[i]表示所有从前i家商店中选择的选法中获得现金数量最大的值。对于第一组样例,阿福选择第2家店铺行窃,获得的现金数量为8。对于每个f[i],都有两种状态f[i,0],f[i,1]。原创 2025-02-18 20:39:20 · 1073 阅读 · 0 评论 -
动态规划DP 背包问题 能量石(题目分析+C++完整代码)
这需要 100 秒,并给他 20 单位的能量(第三块石头开始时具有 30 单位能量,10 秒后失去了 10 单位的能量)。这需要 5 秒,并给他 5 单位的能量(第二块石头开始时具有 30 单位能量,5 秒后失去了 25 单位的能量)。这需要 20 秒,并给他 0 单位的能量(第一块石头以 10 单位能量开始,110 秒后已经失去了所有的能量)。当杜达开始吃一块能量石时,他就会立即获得该能量石所含的全部能量(无论实际吃完该石头需要多少时间)。无论杜达选择吃哪块石头,剩下的两个石头的能量都会耗光。原创 2025-02-15 14:55:19 · 1144 阅读 · 0 评论 -
动态规划DP 背包问题 求方案数(模型分析+C++完整代码)
接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。注意答案可能很大,请输出答案模 109+7 的结果。输出一个整数,表示 方案数 模 109+7 的结果。第 i 件物品的体积是 vi,价值是 wi。01背包问题的状态计算方程为。若选择i的方案数等于不选择。原创 2025-02-14 20:46:00 · 622 阅读 · 0 评论 -
动态规划DP 背包问题 有依赖的背包问题(模型分析+C++完整代码)
为根的树中,将其子结点对应子树看作一组组物品,也就是对于k个子树,即k组物品,此时转化为分组背包问题。ne数组存储下一条边,如果ne的为-1表示当前结点没有下一条边,ne的下标是当前边的编号,数值是当前结点的下一条边的编号;每件物品的编号是 i,体积是 vi,价值是 wi,依赖的父节点编号是 pi。h数组是邻接表的表头,其下标为当前节点值,h的值是当前结点第一条边的编号(最后加入的那一条边);这是因为2是5的父节点,1是2的父节点。e数组是边的集合,其下标为当前边的编号,数值是当前边的终点;原创 2025-02-14 20:14:38 · 751 阅读 · 0 评论 -
动态规划DP 背包问题 机器分配(分组背包问题+背包问题求具体方案)(题目详解+C++完整代码)
每个分公司可分走0,1,2,···,n个设备(只能为一种情况):每组物品内包含物品1且体积为1,物品2且体积为2,···,物品n且体积为n(且只能选一个)接下来是一个 N×M的矩阵,矩阵中的第 i行第 j列的整数表示第 i个公司分配 j台机器时的盈利。第一行有两个数,第一个数是分公司数 N,第二个数是设备台数 M;遍历第n组中的所有物品,判断是否选择了该组内的某个物品,即判断。总公司拥有 M台 相同的高效设备,准备分给下属的 N个分公司。经过动态规划的计算,我们知道f[n][m]存储的即为最大利润。原创 2025-02-10 13:38:31 · 588 阅读 · 0 评论 -
动态规划DP 背包问题 分组背包(模型分析+C++完整代码)
每组数据接下来有 Si行,每行有两个整数 vij,wij,用空格隔开,分别表示第 i个物品组的第 j个物品的体积和价值;每件物品的体积是 vij,价值是 wij,其中 i 是组号,j是组内编号。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。第一行有两个整数 N,V,用空格隔开,分别表示物品组数和背包容量。我们可以选择第i组的物品si(第i组物品总共i个),则转化为从前。每组数据第一行有一个整数 Si,表示第 i个物品组的物品数量;我们可以选择第i组的物品1,则转化为从前。原创 2025-02-09 22:00:38 · 1020 阅读 · 0 评论 -
动态规划DP 背包问题 01背包(模型讲解+应用:采药+装箱问题+数字组合)
接下来的 M行每行包括两个在 1到 100之间(包括 1和 100)的整数,分别表示采摘某株草药的时间和这株草药的价值。输入文件的第一行有两个整数 T和 M,用一个空格隔开,T代表总共能够用来采药的时间,M代表山洞里的草药的数目。输出文件包括一行,这一行只包含一个整数,表示在规定的时间内,可以采到的草药的最大总价值。如果你是一个聪明的孩子,你应该可以让采到的草药的。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。原创 2025-02-09 21:30:28 · 1171 阅读 · 0 评论 -
动态规划DP 背包问题 完全背包问题(模型详解+例题应用:买书)
接下来有 N行,每行两个整数 vi,wi,用空格隔开,分别表示第 i种物品的体积和价值。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。可以选0个 i,即在 0~i -1 个物品中选择,体积不超过j,即。第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。可以选1个 i,同时在 0~i -1 个物品中选择,体积不超过。可以选k个 i,同时在 0~i -1 个物品中选择,体积不超过。完全背包:对于每个物品可以选0,1,2···个(无限件可用)。全部用来买书,书的价格。原创 2025-02-08 16:11:03 · 745 阅读 · 0 评论 -
动态规划DP 背包问题 多重背包问题(模型讲解+应用:庆功会)
接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i种物品的体积、价值和数量。可以选 s[i] 个 i,同时在 0~i -1 个物品中选择,体积不超过。多重背包:对于每个物品可以选择0,1,2,···,s[i]个(有限个)。可以选0个 i,即在 0~i -1 个物品中选择,体积不超过j,即。第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。可以选1个 i,同时在 0~i -1 个物品中选择,体积不超过。接下来n行,每行3个数,v、w、s,分别表示第I种奖品的。原创 2025-02-08 15:34:37 · 841 阅读 · 0 评论 -
动态规划DP 背包问题 二维背包(二维模型分析+应用:宠物小精灵之收服+潜水员)
现在已知小智的精灵球数量和皮卡丘的初始体力,已知每一个小精灵需要的用于收服的精灵球数目和它在被收服过程中会对皮卡丘造成的伤害数目。之后的K行,每一行代表一个野生小精灵,包括两个整数:收服该小精灵需要的精灵球的数量,以及收服过程中对皮卡丘造成的伤害。输入数据的第一行包含三个整数:N,M,K,分别代表小智的精灵球数量、皮卡丘初始的体力值、野生小精灵的数量。表示为,在每种精灵消耗一定精灵球,消耗一定体力,在给定的精灵球总数和皮卡丘体力的限定下,抓捕尽量多的精灵。然而,野生的小精灵并不那么容易被收服。原创 2025-02-06 16:20:46 · 1184 阅读 · 0 评论 -
动态规划DP 背包问题 多重背包问题(朴素版+二进制优化+单调队列)
f[i,j]与f[i,j-v]有相同项,但f[i,j-v]比f[i,j]多了一项,仔细观察发现,f[i,j]的max计算即为f[i,j-v]的前s项+w,即。优化后,我们采用打包,打包为1个,2个,4个,8个,···,64个(2的次方),各位一组,共7组。原来我们需枚举:1,2,3,···,64,···,120,共s=120个。原来我们需枚举:1,2,3,···,127,127,共s=127个。优化后,我们采用打包,打包为1个,2个,4个,8个,···,32个,原创 2025-02-04 14:55:34 · 844 阅读 · 0 评论 -
单调队列 滑动窗口(题目分析+C++完整代码)
如下列实例滑动窗口中,3<-3,-1<-3,且-3在后面,则只要-3在,则最小值一定是-3,3与-1的值一定不会被取到,该数组为 [1 3 -1 -3 5 3 6 7],k为 3。有一个大小为 k的滑动窗口,它从数组的最左边移动到最右边。任务是确定滑动窗口位于每个位置时,窗口中的最大值和最小值。,即前面的数大于后面的数,则一定不会取到,则。(可仔细看下方实例加深理解!你只能在窗口中看到 k个数字。每次滑动窗口向右移动一个位置。来维护,队尾插入,队头弹出。因此,提炼出,只要出现。原创 2025-02-03 21:16:44 · 512 阅读 · 0 评论 -
动态规划DP 背包问题 完全背包问题(题目分析+C++完整代码)
接下来有 N行,每行两个整数 vi,wi,用空格隔开,分别表示第 i种物品的体积和价值。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。可以选0个 i,即在 0~i -1 个物品中选择,体积不超过j,即。第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。可以选1个 i,同时在 0~i -1 个物品中选择,体积不超过。可以选k个 i,同时在 0~i -1 个物品中选择,体积不超过。完全背包:对于每个物品可以选0,1,2···个(无限件可用)。即为上述所有结果的最大值。原创 2025-02-01 20:46:51 · 1639 阅读 · 0 评论 -
动态规划DP 背包问题 01背包(题目详解 朴素版+优化版+C++完整代码)
但值得注意的是,同时也是理解的难点为,在二维情况下,我们采用 f[i] 和 f[i-1] 来更新现态,但在一维中,无法表示f[i-1],在进行 f[i] 计算时需要用到 f[i-1] 时已被。接下来有 N行,每行两个整数 vi,wi,用空格隔开,分别表示第 i件物品的体积和价值。,f[i]的计算只用到了f[i-1],意味着该层的计算只与上一层有关,可进行一维优化。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。原创 2025-02-01 18:14:13 · 1168 阅读 · 0 评论 -
动态规划DP 背包模型 概览
本文主要提供寻找各类背包问题的链接,便于检索。原创 2025-02-01 15:28:18 · 262 阅读 · 0 评论 -
动态规划DP 最长上升子序列模型 最长公共上升子序列
奶牛半懂不懂,小沐沐要你来告诉奶牛什么是最长公共上升子序列。第一行包含一个整数 N,表示数列 A,B的长度。熊大妈的奶牛在小沐沐的熏陶下开始研究信息题目。输出一个整数,表示最长公共上升子序列的长度。小沐沐说,对于两个数列 A和 B,如果它们。数列 A和 B的长度均不超过 3000。,而所有的公共上升子序列中最长的就是。不过,只要告诉奶牛它的长度就可以了。第二行包含 N个整数,表示数列 A。第三行包含 N个整数,表示数列 B。的,那么称这一段数是两个数列的。小沐沐先让奶牛研究了。原创 2025-01-31 16:01:18 · 353 阅读 · 0 评论 -
动态规划DP 最长上升子序列模型 导弹防御模型(题目分析+C++完整代码实现)
例如,一套系统先后拦截了高度为 3和高度为 4的两发导弹,那么接下来该系统就只能拦截高度大于 4的导弹。给定即将袭来的一系列导弹的高度,请你求出至少需要多少套防御系统,就可以将它们全部击落。对于每个测试用例,输出一个占据一行的整数,表示所需的防御系统数量。一套击落高度为 3,4的导弹,另一套击落高度为 5,2,1的导弹。为了对抗附近恶意国家的威胁,R国更新了他们的导弹防御系统。对于每个测试用例,第一行包含整数 n,表示来袭导弹数量。第二行包含 n个不同的整数,表示每个导弹的高度。输入包含多组测试用例。原创 2025-01-31 15:14:35 · 348 阅读 · 0 评论 -
动态规划DP 最长上升子序列模型 拦截导弹(题目分析+C++完整代码)
当我们选择到第k个导弹时,前面已经建造了m个系统,即有m个下降序列,此时,我们面临着选择哪个系统(即接在哪个序列的后面)。输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数,导弹数不超过1000),计算这套系统。易知,序列结尾的数越大,在他后面能接上的数肯定就越多。大于等于当前数的序列结尾数(即当前数不能放在任何序列的后面),则新建造一个新系统。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。(这样,选择较小的,剩下的序列结尾数就相对较大)。原创 2025-01-31 14:22:43 · 447 阅读 · 0 评论 -
动态规划DP 最大上升子序列模型 最大上升子序列和(题目分析+C++完整代码)
aN),我们可以得到一些上升的子序列(ai1,ai2,…比如,对于序列(1,7,3,5,9,4,8),有它的一些上升子序列,如(1,7),(3,4,8)等等。,比如序列(100,1,2,3)的最大上升子序列和为100,而最长上升子序列为(1,2,3)。根据倒数第二个数进行集合的划分,若倒数第二个数为a[k](即前一个数为a[k])即求上述所有可能序列中以a[k]为结尾的序列之和的最大值+a[i]。这些子序列中和最大为18,为子序列(1,3,5,9)的和。要求以a[i]结尾的序列之和的最大值,原创 2025-01-30 15:22:42 · 341 阅读 · 0 评论 -
动态规划DP 最长上升子序列模型 友好城市(题目分析+C++完整代码分析)
我们对下方城市进行编号,下方城市的顺序为:黄1 - 红2 - 蓝3 - 紫4 - 绿5 - 黑6,第2行到第n+1行,每行两个整数,中间用1个空格隔开,分别表示南岸和北岸的一对友好城市的坐标。至此,我们可以发现对应任何一种合法建桥方式,上方城市的序列一定是单调上升(1-3-4-6)的。若下一个城市为红色城市,则其对应的友好城市在黄色城市的左边,出现交叉,不可选;若下一个城市为蓝色城市,则其对应的友好城市在黄色城市的右边,不出现交叉,可选。,也就是说,下方城市的下一个城市对应的上方城市一定在前一个城市的。原创 2025-01-30 14:57:52 · 759 阅读 · 0 评论 -
动态规划DP 最长上升子序列模型 合唱队形(题目分析+C++完整代码)
以最高的同学为划分,划分为左半部分的递增子序列,和右半部分的递减子序列(也就是相当于逆着的递增子序列),可直接看出该题为最长上升子序列模型。,K,他们的身高分别为 T1,T2,…你的任务是,已知所有 N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。N位同学站成一排,音乐老师要请其中的 (N−K)位同学出列,使得剩下的 K位同学排成合唱队形。则对应一个顶峰同学为i的合唱队形下的人数为 f[i]+g[i]-1 ,遍历所有1~n的可能情形下,取其中人数最多(数值最大)的值max,原创 2025-01-30 10:58:05 · 493 阅读 · 0 评论 -
动态规划DP 最长上升子序列模型 登山(题目分析+C++完整代码)
队员们希望在满足上面条件的同时,尽可能多的浏览景点,你能帮他们找出最多可能浏览的景点数么?五一到了,ACM队组织大家去登山观光,队员们发现山上一共有N个景点,并且决定。看到这个示意图是否有些熟悉?来浏览这些景点,即每次所浏览景点的编号都要。第二行包含N个整数,表示每个景点的海拔。输出一个整数,表示最多能浏览的景点数。是求出左半部分和右半部分的最大值后,是求出左半部分和右半部分的所有值后。同时队员们还有另一个登山习惯,就是。第一行包含整数N,表示景点数量。原创 2025-01-30 10:24:09 · 427 阅读 · 0 评论 -
动态规划DP 总览
本文为动态规划DP问题概览,便于检索找到各类型题目原创 2025-01-29 16:57:24 · 518 阅读 · 0 评论 -
动态规划DP 最长上升子序列模型 怪盗基德的滑翔伞(题目分析+C++完整代码实现)
第二行包含N个不同的整数,每一个对应一幢建筑的高度h,按照建筑的排列顺序给出。有一天,怪盗基德像往常一样偷走了一颗珍贵的钻石,不料却被柯南小朋友识破了伪装,而他的滑翔翼的动力装置也被柯南踢出的足球破坏了。而他最为突出的地方,就是他每次都能逃脱中村警部的重重围堵,而这也很大程度上是多亏了他随身携带的便于操作的滑翔翼。因此,符合题意下,只需遍历所有建筑将其作为起始位置,选择其中最长的上升子序列,即为答案。对于每一组测试数据,输出一行,包含一个整数,代表怪盗基德最多可以经过的建筑数量。初始时,怪盗基德可以在。原创 2025-01-29 16:43:45 · 415 阅读 · 0 评论 -
动态规划DP 最长上升子序列模型 最长上升子序列(题目分析+C++完整代码)
有很多组以a[k]为倒数第二个数,a[i]为结尾的序列,而其中的最长序列即为**···到a[k]的最大值max 再加上1(a[i])给定一个长度为 N的数列,求数值严格单调递增的子序列的长度最长是多少。1≤N≤1000,−109≤数列中的数≤109。第二行包含 N个整数,表示完整序列。等价为 f[a[k]] +1**。输出一个整数,表示最大长度。第一行包含整数 N。原创 2025-01-29 15:53:17 · 476 阅读 · 0 评论 -
动态规划DP 数字三角形模型(模型分析+例题分析+C++代码实现)(数字三角形、摘花生、最低通行费用、方格取数、传纸条)
AcWing 898.数字三角形给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。输入格式第一行包含整数 n,表示数字三角形的层数。接下来 n行,每行包含若干整数,其中第 i 行表示数字三角形第 i 层包含的整数。输出格式输出一个整数,表示最大的路径数字和。数据范围1≤n≤500, −10000≤三角形中的整数≤10000输入样例:输出样例:题目分析动态规划分析-闫式思考法从集合原创 2025-01-27 22:07:25 · 1347 阅读 · 0 评论
分享