![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
文章平均质量分 54
动态规划经典题目
Andy_Xie007
这个作者很懒,什么都没留下…
展开
-
递归法解决多重背包问题
方法一:修改递归函数,根据题目新的限制条件——使用次数扩充状态参数个数,将同一个物品选用的次数同样作为参数传递到栈空间中,同时也对原状态数组扩充一位,防止记忆化搜索时状态溢出。方法二:修改物品列表,仿照完全背包问题方法二对物品列表进行二次幂插入,且最大插入次数严格小于等于规定次数。多重背包问题同样是01背包问题的变种,同样可以通过修改01背包部分代码来求解。原创 2024-03-01 12:16:44 · 444 阅读 · 0 评论 -
递归法解决完全背包问题
完全背包问题作为01背包问题的升级版,我们可以通过修改01背包递归函数来求解完全背包问题。原创 2024-02-28 12:30:00 · 223 阅读 · 0 评论 -
递归法解决01背包问题
自从学习编程以来一直对递归法怀有一些畏难情绪,而递归作为一个常用的基础算法,是几乎绕不开的技能。刚刚结束的湖南大学冬季杯数学建模竞赛中A题第二问中用到递归+贪心算法,让我重新开始审视递归法。题目链接:AcWing 2. 01背包问题。原创 2024-02-27 15:27:17 · 476 阅读 · 0 评论 -
【二叉树/动态规划】Leetcode 543.二叉树的直径
由于题目特意说明了最浅节点并不一定是根节点,所以理论上二叉树中所有节点都可以作为这个最浅节点。(即便是叶节点也可以认为它有2个地址为nullptr的子节点)假如给定一个确定的最浅节点,那么存在唯一“直径”,即存在唯一“一个叶节点经过该最浅节点再到另一个叶节点的路径和的最大值”。也就是说,只要计算出二叉树中所有的节点作为“最浅节点”的“直径”,求该集合中的最大值即可。首先,容易得出,所求直径两端的节点一定为叶子节点。这一点用反证法即可证明,假设直径端点为一个非叶子节点,那么他的子节点一定是一个更优端点。原创 2023-11-18 21:47:39 · 200 阅读 · 0 评论 -
【动态规划】Leetcode 139.单词拆分
对于长度为 i 的字符串,当且仅当长度为 j ( j < i )的字符串合法且下标从 i - j 到 i 的字符串能被字典中的任意一词表示时长度为 i 的字符串合法,即。3.判断长度为i的字符串是否合法(能被拆分成多个单词)2.初始化动态规划数组。原创 2023-11-14 14:40:09 · 326 阅读 · 1 评论 -
洛谷 P1356 数列的整除性
首先不难想到,如果选择用累加的方式求和然后判断是否整除一定会超时,因此不妨将“和能被常数k整除”转化为“结果除以常数k的余数为0”, 这样依次判断前i个数添加符号后的数列和的余数即可。具体来说,对于每个数,我们可以选择将它加或者减,从而得到新的余数。因此,我们可以采用二维状态数组。接下来,对于每个数,我们可以枚举前面的状态,并根据当前数的值更新状态数组。是可达的,那么我们可以通过加或者减当前数得到新的余数。为真,那么说明可以得到余数为0,即整个序列可以被。初始化时,第一个数的余数可以是。原创 2023-10-29 23:27:36 · 154 阅读 · 1 评论 -
洛谷 P2925 [USACO08DEC] Hay For Sale S
这题同样是退化的01背包问题,主要来实验了一下关于背包问题的一些优化策略。原创 2023-10-25 18:43:52 · 86 阅读 · 1 评论 -
【CCF CSP】202209-2 何以包邮?(解题思路+满分题解)
70分暴力解法,核心代码用二进制+位运算遍历书本的所有组合方式。由于从0到2^size的二进制数恰好覆盖书的组合情况,所以可以不重不漏地计算每一种组合的总价,由于当时还没有学递归,所以用了这个函数实现没有优化的搜索,时间复杂度O(2^n)。下面是完整代码后来自然也想了很多优化方法,比如说先将所有书本排序,然后从小往大累加,直到超过题设包邮价格,求出至多选多少书;从大往小累加,直到超过包邮价格,求出至少选多少书,遗憾的是,这些优化对于搜索算法的优化是常数级别,而想要不超时需要指数级别的优化效果。原创 2023-10-25 00:26:17 · 902 阅读 · 9 评论 -
Acwing 2.07混合背包问题
按照背包内物品可以选取的次数(1次,有限次,无数次),将物品分别按照01背包,多重背包,完全背包策略进行处理即可。这里重点讲讲多重背包问题解法中采用的二进制优化。对于物品i,可以取用p次。我们当然可以通过将这个物品转化成p个价值和体积递增的物品由此转化为01背包问题。(假设价值5,体积4的物品可以取用3次,那么可以转化为有3个物品,价值分别为5,10,15,体积分别为4,8,12的01背包)如果将次数拆分成2的各阶幂的和的形式,那么可以大大减少计算量。原创 2023-10-26 23:58:56 · 151 阅读 · 0 评论