
动态规划
文章平均质量分 97
余辉zmh
河南师范大学软件学院在读大二学生
展开
-
【动态规划篇】:解析背包问题--动态规划塑造的算法利器
题目算法原理根据题意要求,假设现在有一堆石头,先挑选b和c两个石头,剩余,然后挑选d和e两个石头,剩余,然后挑选a和b-c两个石头,剩余,最后两个石头相减,剩余,最后剩余石头的质量就是每个石头的质量相加减,其实和上一题有点相似,最后这个表达式就是在每个数字前添加正号和负号,然后分成两堆,一堆为正数,一堆为负数。假设所有正数的总和为a,所有负数的总和绝对值为b,所有数的和为a+b=sum,要使a-b的。原创 2025-02-21 22:49:01 · 704 阅读 · 0 评论 -
【动态规划篇】:动态规划中的“双线叙述”--如何用状态转移解决双序列难题
如果反着来看就是找两个字符串的公共子序列最大ASCLL码和,然后用两个字符串总的ASCLL码和减去二倍的公共子序列中的最大ASCLL码和(这里减去二倍是因为存在两个字符串,需要减去两次公共子序列的最大ASCLL码和),因此本道题就转换成了找两个字符串的公共子序列的最大ASCLL码和。本道题虽然是三个字符串,但是第三个字符串是由前两个字符串拼接而成的,所以还是属于两个字符串类的DP问题,这里还是从某段区间考虑,分析前两个字符串的某段区间的子串能否拼接成第三个字符串的某段区间的子串。最后取三种情况中的最大值。原创 2025-02-17 23:17:47 · 890 阅读 · 0 评论 -
【动态规划篇】:当回文串遇上动态规划--如何用二维DP“折叠”字符串?
无法同时包含这两个字符,需要舍弃左端的字符然后在左侧插入一个右端的字符或者舍弃右端的字符然后在右侧插入一个左端的字符,然后找剩余区间中的回文子串最少插入次数,存储所有子串的信息,在填表的时候,如果当前区间的子串是回文子串,就判断是否更新最长长度,注意还要保留最长回文子串的起始位置。的子串是否是回文串,其中i位置的字符是子串的起始位置,j位置的字符是子串的结束位置,存储每一个子串的信息,是。本道题有点不同,需要找到的是回文子序列,关键点:回文子序列是允许字符不连续的,因此需要灵活利用状态转移。原创 2025-02-15 22:31:33 · 882 阅读 · 0 评论 -
【动态规划篇】:解剖子序列类DP问题--如何用“以始为终“的思维暴力破解难题(二)?
返回值:因为并不知道最长的斐波那契子序列是以哪两个位置为结尾的,所以需要遍历整个状态表找到最大值返回,但是这里可能会有特殊情况,比如整个序列不存在斐波那契子序列,那状态表中的值就一直是2,最后获取到的最大值还是2,但是题意要求斐波那契子序列的长度最小为3,所以,在返回时,需要先判断一下最大值是否小于3,如果小于,直接返回0,说明不存在;,以k位置和i位置元素a,b为结尾的等差数列有多少个,以i位置和j位置元素b,c为结尾的等差数列就有多少个,因为a,b,c同样也是等差数列,所以个数还要多加一。原创 2025-02-14 11:24:24 · 760 阅读 · 0 评论 -
【动态规划篇】:解剖子数组类DP问题--如何用“以始为终“的思维暴力破解难题(一)?
返回值:如果数组中全为负数比如[-1,-1,-2],最小子数组和就等于整个数组和-4,两个相减得到的最大子数组和就是0,但是根据数组中可以看出,最大子数组和为-1,两个直接返回最大的会出现错误,所以需要单独判断一下这种特殊情况:如果最小子数组和等于整个数组和,直接返回最大子数组和;状态转移方程:如果当前位置i的字符和上一个位置i-1的字符是相邻字符,也就是差值为1或者当前字符是’a’,上一个字符是’z’满足两种情况的其中一种,找以当前位置i的字符为结尾的字符串有多少子字符串满足条件(原创 2025-02-13 16:59:36 · 866 阅读 · 0 评论 -
【动态规划篇】:多状态DP的量子纠缠现象--看似独立却相互制约的状态演化
本道题相较于上面的股票题,因为加上了交易次数限制,所以当天结束后,可能会出现非常多的状态,比如处于交易一次的买入状态,或者交易两次的卖出状态,因此本道题的难点在于对多个状态的处理,还有对初始化的处理。表示第i天结束时,此时的最大利润,第i天有多种状态,可能是买入,或者卖出,也可能交易一次或者交易两次,继续细分(用两个二维数组表示买入和卖出状态,每个数组中的行数i表示第几天,列数j表示交易多少次)。初始化:由方程中的i-1大于等于0可以得到,i要大于等于1时,才不会越界,所以需要单独处理下标i=0时的情况。原创 2025-02-11 11:30:49 · 1002 阅读 · 0 评论 -
【动态规划篇】:动态规划解决路径难题--思路,技巧与实例
状态表示是否合理,能否覆盖所有可能的路径情况。状态转移方程是否正确,是否覆盖了当前位置所有的移动方向。初始化是否正确,特别是边界处理,如果添加虚拟下标,能否保证后面边界状态值的正确以及下标的映射是否对应。特殊情况的处理,比如当前路径上存在障碍,起点终点不可达等情况。原创 2025-02-10 21:17:49 · 1105 阅读 · 0 评论 -
【动态规划篇】:动态规划入门--斐波那契数列模型练习题讲解
动态规划()是一种解决复杂问题的算法思想,核心是通过分解子问题,存储中间结果,避免重复计算来优化效率。通常用于解决具有重复子问题和最优子结构的问题。由上面的斐波那契数为例简单地讲解了什么是动态规划,在开始学习动态规划时,一定要掌握好对基础题的理解,因为动态规划属于较难的算法,特别是对状态表示的理解以及状态转移方程的推导,两个都是较难点,特别的抽象,大多都是根据一些经验和题目要求来得出,因此在做基础题时一定要理解清它们的状态表示含义和状态转移方程的推导,这些都是后面做较难题的经验。原创 2025-02-08 11:16:57 · 733 阅读 · 0 评论