动态规划
文章平均质量分 83
一个动态规划的专栏
Sirius·Black
Hi,我是Sirius·Black,一个平平无奇的初中小学生~ 支持互3哦 [ 私信我,或在评论区暗示 (๑╹ヮ╹๑) ]!
展开
-
P1006 [NOIP2008 提高组] 传纸条
小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排坐成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运的是,他们可以通过传纸条来进行交流。纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标11,小轩坐在矩阵的右下角,坐标mn。从小渊传到小轩的纸条只可以向下或者向右传递,从小轩传给小渊的纸条只可以向上或者向左传递。在活动进行中,小渊希望给小轩传递一张纸条,同时希望小轩给他回复。原创 2023-12-23 09:38:06 · 748 阅读 · 0 评论 -
合并沙子(IOI1995)——DP优化【四边形不等式】
设有N沙子排成一排,其编号为1,2,……,N(N小于500),每堆子有一定的数量,用a[k]表示第K堆沙子的数量值,现在要将N堆沙子归并成为一堆,归并的过程为每次只能将相邻的两堆沙子堆成一堆,合并后的这堆沙子的代价为这两堆沙子的数值和,这样经过N-1次归并之后,最后成为一堆。不同的归并方案的总代价值是不同的。现给出N堆沙子的数量后,找出一种合理的归并方法,使总的归并代价为最小。原创 2023-08-17 22:46:19 · 184 阅读 · 1 评论 -
C++ 背包问题——01背包
一个旅行者有一个最多能装M公斤的背包,现在有n件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2,...,Cn,求旅行者能获得最大总价值。公式中有i有j,那么这是一个双重循环,w数组表示重量,c数组表示价值。第一行两个整数,M(背包容量,M.........原创 2022-07-20 19:41:32 · 3780 阅读 · 3 评论 -
C++ 背包问题——多重背包
要想了解多重背包,首先要了解01背包(会的也看一看),多重背包就是在01背包的基础上,增加了物品的个数,这一点要区别于完全背包,因为完全背包可以取无限个,而多重背包每个物品的个数是有限的。多重背包的数量有可能是所有自然数。原创 2022-08-20 15:44:38 · 3134 阅读 · 5 评论 -
C++背包问题——完全背包必须装满的方案数
想要了解,就得先了解,点击下面方框查看()C++背包问题——完全背包_闪耀的天狼星的博客-CSDN博客一个旅行者有一个最多能装M公斤的背包,现在有n件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2,...,Cn,求旅行者能获得最大总价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于M,而价值的和为最大。,再来看题目,顾名思义,背包必须装满(限制条件必须刚好满足)...原创 2022-07-24 13:29:33 · 1817 阅读 · 2 评论 -
C++ 背包问题——完全背包
一个旅行者有一个最多能装M公斤的背包,现在有n件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2,...,Cn,求旅行者能获得最大总价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于M,而价值的和为最大。完全背包和01背包不同的是,01背包每样物品只能拿一个,而完全背包可以拿无限个,这点怎么做到呢?第一行两个整数,M(背包容量,M≤200)和N(物品数量,N≤30);...原创 2022-07-22 14:52:20 · 954 阅读 · 0 评论 -
C++背包问题——01背包
事实上,使用一维数组解01背包的程序在后面会被多次用到,所以这里抽象出一个处理一件01背包中的物品过程,以后的代码中直接调用不加说明。有的题目要求“恰好装满背包”时的最优解,有的题目则并没有要求必须把背包装满。背包问题是最基本的背包问题,它包含了背包问题中设计状态、方程的最基本思想。的情况下被“恰好装满”,其它容量的背包均没有合法的解,属于未定义的状态,应该被赋值为。如果背包并非必须被装满,那么任何容量的背包都有一个合法解“什么都不装”,这个解的价值为。一句,恰就对应于我们原来的转移方程,因为现在的。原创 2023-01-12 10:01:53 · 3037 阅读 · 0 评论 -
DP——背包问题
当我们谈论背包问题时,可以想象成一个小朋友要去旅行,但是他只能带一个容量有限的背包。他有一些物品可以选择放入背包,每个物品都有自己的重量和价值。小朋友的目标是在不超过背包容量的情况下,选择物品使得总价值最大化。原创 2023-08-15 11:26:38 · 347 阅读 · 0 评论 -
离谱的Bug
在代码中,我不小心将一个变量的名称拼写错误,导致程序无法正确地访问该变量,从而引发了崩溃。幸运的是,修复后的程序没有再出现崩溃的问题,一切都恢复正常了。我从未遇到过这样的Bug,它让我对程序的运行机制产生了更深的思考。起初,我以为是他们的操作有误,但当我亲自测试时,我也遇到了同样的问题。这个Bug的情况非常特殊,因为它只在特定的页面上出现,并且只有在点击特定按钮时才会触发。一旦我找到了Bug的原因,我立即进行了修复。我将变量的拼写错误进行了修正,并进行了一系列的测试,确保程序在修复后能够正常运行。原创 2023-08-16 09:59:00 · 1170 阅读 · 0 评论 -
【动态规划基础】求最长不下降序列
最长不下降子序列问题的基本思想是利用动态规划的思想,通过构建一个辅助数组来记录以每个元素结尾的最长不下降子序列的长度。通过遍历整个序列,不断更新辅助数组的值,最终得到最长不下降子序列的长度。总结: 最长不下降子序列问题通过动态规划的思想,利用辅助数组记录以每个元素结尾的最长不下降子序列的长度,从而得到最长不下降子序列的长度。最长不下降子序列问题是一个经典的算法问题,可以通过动态规划的方法解决。,长度与原始序列相同,用于记录以每个元素结尾的最长不下降子序列的长度。,用于记录最长不下降子序列的长度。原创 2023-08-14 10:20:35 · 967 阅读 · 2 评论 -
【动态规划基础】求最大连续子序列和——最大子段和
动态规划法通过利用子问题的最优解,将问题分解为更小的子问题,从而提高了效率。在实际应用中,动态规划法是解决最大连续子序列和问题的常用方法。暴力法是最直观的解决方法,它通过遍历所有可能的子序列,并计算它们的和,最后返回最大的和。动态规划法是一种更高效的解决方法,它通过利用子问题的最优解来构建整个问题的最优解。当解决最大连续子序列和问题时,可以使用两种基本方法:暴力法和动态规划法。,暴力法将遍历所有可能的子序列,计算它们的和,并返回最大的和,即。,动态规划法将遍历整个序列,计算当前子序列的和,并更新。原创 2023-08-14 10:06:06 · 1346 阅读 · 1 评论 -
DP——动态规划
总结起来,实现动态规划算法的关键在于确定问题的状态和状态转移方程,并按照计算顺序进行递推或迭代计算,最终得到原始问题的最优解。原创 2023-08-14 10:55:54 · 511 阅读 · 11 评论 -
树形动态规划——树形dp
树形dp算法是一种用于解决树相关问题的动态规划算法。它把树的问题分解成了子问题,并通过子问题的求解来构建整个问题的解。当我们面对一棵树的问题时,我们可以使用树形dp来解决。这种算法的基本思想是通过定义一个用于存储子问题结果的数组,然后根据问题的性质和树的结构,确定每个节点的解与其子节点的解之间的关系。具体来说,我们首先需要定义一个数组,大小和树的节点个数相同。每个数组元素的值表示对应节点的某种性质或状态,比如路径长度、权值等。然后,我们找到问题的性质并确定对应的状态转移方程。原创 2023-08-16 11:18:50 · 205 阅读 · 2 评论 -
[NOIP2008 提高组] 传纸条——DP+优化
小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排坐成一个 m 行 n 列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运的是,他们可以通过传纸条来进行交流。纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标 (1,1),小轩坐在矩阵的右下角,坐标 (m,n)。从小渊传到小轩的纸条只可以向下或者向右传递,从小轩传给小渊的纸条只可以向上或者向左传递。原创 2023-08-17 16:41:09 · 125 阅读 · 0 评论