📝 动态编程
1324篇技术文档📅  最后修改于: 2021-09-17 07:00:15        🧑  作者: Mango
这是子集求和问题的扩展版本。这里我们需要找到总和等于给定总和的最大大小子集的大小。例子:这是对子集求和问题的进一步增强,它不仅可以判断子集是否可能,还可以判断使用 DP 的最大子集。要解决子集求和问题,请使用与子集求和问题中给出的相同的 DP 方法。为了进一步计算最大子集,我们使用另一个 DP 数组(称为“计数数组”),其中 count[i][j] 是计数[i][j-1]。这里不考虑当前元素。co...
📅  最后修改于: 2021-09-17 07:00:22        🧑  作者: Mango
给定一个整数K和两个由N和M 个整数组成的数组A[]和B[],任务是根据以下规则最大化可以从任一数组前面删除的元素数:从数组A[]和B[]的前面移除一个元素,使得被移除元素的值最多为 K。将K的值减少所移除元素的值。例子:Input:K = 7, A[] = {2, 4, 7, 3}, B[] = {1, 9, 3, 4, 5}Output:3Explanation:Operation 1:Cho...
📅  最后修改于: 2021-09-17 07:00:30        🧑  作者: Mango
给定一个大小为N的数组arr[],任务是从给定数组中找到非空子序列的数量,使得该子序列的两个相邻元素没有相同的奇偶校验。例子:Input:arr[] = [5, 6, 9, 7]Output:9Explanation:All such subsequences of given array will be{5}, {6}, {9}, {7}, {5, 6}, {6, 7}, {6, 9}, {5,...
📅  最后修改于: 2021-09-17 07:00:36        🧑  作者: Mango
一个公司有N个员工,每个员工都有一些评分。员工根据他们的评级获得加薪,即评级较高的员工将获得更高的加薪。员工只知道其邻居的加息和评级,即在员工的左侧和右侧。给定一个由N 个正整数组成的数组arr[]表示N 个员工的评级,任务是找到每个员工应该提高的最低加薪,这样没有员工会感到不公平。注意:加息仅为正整数,评级始终大于零。例子:Input:arr[] = {1, 3, 5, 4}Output:1 2...
📅  最后修改于: 2021-09-17 07:00:44        🧑  作者: Mango
给定一个包含正整数值的圆形数组。任务是找到一个子序列的最大和,约束条件是序列中没有 2 个数字应该在数组中相邻。例子:方法该问题可以使用 DP 解决。这篇文章中已经讨论了一种方法,但它用于数组。我们可以将循环子数组处理为两个数组,一个从 (0th 到 n-2-th) 和 (1st 到 n-1-th) 索引,并使用上一篇文章中使用的方法。两者返回的最大总和将是答案。下面是上述方法的实现。C++Jav...
📅  最后修改于: 2021-09-17 07:00:51        🧑  作者: Mango
给定一个由N 个非负整数组成的数组arr[]和一个整数K,其思想是找到相邻元素的异或等于K的最长子序列的长度。例子:Input:N = 5, arr[] = {3, 2, 4, 3, 5}, K = 1Output:3Explanation:All the subsequences having Xor of adjacent element equal to K are {3, 2}, {2, ...
📅  最后修改于: 2021-09-17 07:00:58        🧑  作者: Mango
给定一个容量为C的背包和两个数组w[]和val[]代表N 个不同物品的重量和值,任务是找到可以放入背包的最大值。物品不能被破坏,重量为X的物品需要背包的X容量。例子:Input:w[] = {3, 4, 5}, val[] = {30, 50, 60}, C = 8Output:90We take objects ‘1’ and ‘3’.The total value we get is (30 ...
📅  最后修改于: 2021-09-17 07:01:05        🧑  作者: Mango
给定一个包含整数值的矩阵,其中矩阵的每个单元格代表建筑物的高度。找到从第一个建筑物 (0, 0) 到最后一个 (n-1, m-1) 所需的最小跳跃。从一个单元格跳到下一个单元格是两个建筑物高度之间的绝对差异。例子 :朴素的递归解决方案:上面的问题可以通过使用递归轻松解决。到达 (m, n) 的路径必须通过 3 个单元格之一:(m-1, n-1) 或 (m-1, n) 或 (m, n-1)。因此,达...
📅  最后修改于: 2021-09-17 07:01:12        🧑  作者: Mango
给定一个大数 N(N 中的位数最多可达 105)。任务是找到一个数字所需的切割,使得最大部分可以被 3 整除。例子:方法:让我们计算数组 res[0…n] 的值,其中 res[i] 是长度 i 的前缀的答案。显然,res[0]:=0,因为对于空字符串(长度为 0 的前缀),答案是 0。对于 i>0,可以通过以下方式找到 res[i]:让我们看一下长度为 i 的前缀的最后一位数字。它的索引为 i-1...
📅  最后修改于: 2021-09-17 07:01:19        🧑  作者: Mango
给定一个距离 ‘dist,计算用 1、2 和 3 步覆盖该距离的方法总数。例子:递归解方法:有n个楼梯,一个人可以走下一步,跳过一个位置或跳过两个位置。所以有n个位置。这个想法是站在人可以移动 i+1、i+2、i+3 位置的第 i 个位置。因此可以形成一个递归函数,其中在当前索引 i 处,该函数被递归调用到 i+1、i+2 和 i+3 位置。还有另一种形成递归函数。要到达位置 i,一个人必须从 i...
📅  最后修改于: 2021-09-17 07:01:26        🧑  作者: Mango
Newman-Conway 序列是生成以下整数序列的序列。1 1 2 2 3 4 4 4 5 6 7 7…在数学上,纽曼-康威数的序列 P(n) 由递推关系定义种子值 P(1) = 1 和 P(2) = 1给定一个数字 n,在 Newman-Conway 数列中打印第 n 个数字。例子 :方法一(使用递归):一个简单的方法是直接递归实现上述递归关系。C++JavaPythonC#PHPJavasc...
📅  最后修改于: 2021-09-17 07:01:33        🧑  作者: Mango
我们必须绘制 n 个长度为 {A1, A2…An} 的板。有 k 个油漆工可用,每个油漆工需要 1 个单位时间来绘制 1 个单位的板。问题是找到获得的最短时间这项工作是在任何画家只会绘制板的连续部分的约束下完成的,比如板 {2, 3, 4} 或仅板 {1} 或什么都没有,但板 {2, 4, 5}。例子:从上面的例子可以看出,将板子分成 k 个相等的分区的策略显然不适用于所有情况。我们可以观察到,问...
📅  最后修改于: 2021-09-17 07:01:39        🧑  作者: Mango
给定两个长度相同的字符串S和T。任务是通过执行以下操作来确定我们是否可以构建等于字符串T 的字符串A(初始为空)。删除S的第一个字符并将其添加到A的前面。删除S的第一个字符并将其添加到A的后面。例子:Input:S = “abab” T = “baab”Output:YESExplanation:Add ‘a’ at front of A, then A = “a” and S = “bab”Ad...
📅  最后修改于: 2021-09-17 07:01:47        🧑  作者: Mango
给定一个具有N个顶点和M 个边的无向图,每个顶点都与一个成本相关联,并且给定了一个源顶点S。任务是从源顶点S找到最大成本路径,使得没有边被连续访问 2 次或更多次。例子:Input:N = 5, M = 5, source = 1, cost[] = {2, 2, 8, 6, 9}, Below is the given graph:Output:21Explanation:The maximum...
📅  最后修改于: 2021-09-17 07:01:54        🧑  作者: Mango
给定具有N 个节点的树,任务是找到所有路径的长度之和。树中两个节点的路径长度是路径上的边数,树中两个相邻节点的路径长度为1。例子:天真的方法:检查所有可能的路径,然后添加它们以计算最终结果。这种方法的复杂度为 O(n2)。高效的方法:可以注意到,树中的每条边都是一座桥。因此,该边将出现在该边连接的两个子树之间的每条可能路径中。例如,边 (1 – 0) 存在于 {1, 3, 4} 和 {0, 2} ...