📝 动态编程

1324篇技术文档
  给定二维数组中的最小和子矩阵

📅  最后修改于: 2021-09-17 06:55:22        🧑  作者: Mango

给定一个二维数组,找出其中的最小和子矩阵。例子:方法 1(朴素方法):检查给定二维数组中的每个可能的子矩阵。该解决方案需要 4 个嵌套循环,并且该解决方案的时间复杂度为 O(n^4)。方法二(Efficient Approach):可以使用Kadane的一维数组算法,将时间复杂度降低到O(n^3)。这个想法是将左右列一一固定,并为每个左右列对找到最小总和的连续行。我们基本上找到每个固定的左右列对的...

  O(sum) 空间中的子集和问题

📅  最后修改于: 2021-09-17 06:55:28        🧑  作者: Mango

给定一个非负整数数组和一个值总和,确定给定集合的子集是否存在总和等于给定总和的子集。例子:我们在下面的帖子中讨论了基于动态规划的解决方案。动态规划 |第 25 组(子集和问题)上面讨论的解决方案需要 O(n * sum) 空间和 O(n * sum) 时间。我们可以优化空间。我们创建了一个布尔二维数组子集[2][sum+1]。使用自下而上的方式我们可以填满这张表。在“subset[2][sum+1...

  最小和连续子数组

📅  最后修改于: 2021-09-17 06:55:35        🧑  作者: Mango

给定一个包含n 个整数的数组。问题是找到具有最小(最小)和的连续子数组的元素之和。例子:朴素的方法:考虑所有不同大小的连续子数组并找到它们的总和。具有最小(最小)和的子数组是所需的答案。高效方法:它是基于Kadane算法思想的求最大和连续子数组问题的变体。算法:C++JavaPythonC#PHPJavascript输出:如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性...

  将总和 N 的可能拆分计数为 K 个整数,使得最小值至少为 P

📅  最后修改于: 2021-09-17 06:55:41        🧑  作者: Mango

给定三个整数N、P和K,任务是找到将N分成K 个整数的方法总数,其总和为N,其中每个整数≥P。例子:Input:K = 3, N = 8, P = 2Output:6Explanation:Six possible solutions are: {2, 2, 4}, {2, 3, 3}, {2, 4, 2}, {3, 2, 3}, {3, 3, 2}, {4, 2, 2}Each of the a...

  当恰好允许两次向左移动时,在 2D 矩阵中查找最大路径和

📅  最后修改于: 2021-09-17 06:55:47        🧑  作者: Mango

给定一个维度为N * M的二维矩阵arr[][],其中N是行数,M是列数。任务是在这个矩阵中找到满足某些条件的最大路径和,如下所示:我们只能从arr[i][M] 开始,其中 0 <=i<= N。我们在同一侧结束路径,这样我们可以正好左转 2 个。示例:例子:输入:N = 3, M = 3 arr[][] = {{1, 2, 3}, {3, 3, 1}, {4, 1, 6}}输出:20解释:如果我们...

  字符串可被 n 整除的子序列数

📅  最后修改于: 2021-09-17 06:55:54        🧑  作者: Mango

给定一个由数字 0-9 组成的字符串,计算其中能被 m 整除的子序列的数量。例子:这个问题可以递归定义。当除以 n 时,令值为 x 的字符串的余数为 ‘r’。向该字符串添加一个字符会将其余数更改为 (r*10 + newdigit) % n。对于每个新字符,我们有两个选择,要么将其添加到所有当前子序列中,要么忽略它。因此,我们有一个最优子结构。下面显示了这个的蛮力版本:上述递归解决方案具有重叠的子...

  从源到网格末端的最小距离

📅  最后修改于: 2021-09-17 06:56:00        🧑  作者: Mango

给定一个r * c阶的二进制网格和一个初始位置。任务是找到从源到网格末端(第一行、最后一行、第一列或最后一列)的最小距离。只有当grid[i][j] = 0并且只允许向左、向右、向上和向下移动时,才能对单元格 grid[i][j] 进行移动。如果不存在有效路径,则打印-1。例子:Input:i = 1, j = 1, grid[][] = { {1, 0, 1}, {0, 0, 0}, {1, 1...

  计算从一个点到 Origin 的路径

📅  最后修改于: 2021-09-17 06:56:07        🧑  作者: Mango

你站在一个点(n, m) 上,你想通过向左或向下的步骤去原点(0, 0),即从每个点你可以移动(n-1, m)或( n, m-1)。求从点到原点的路径数。例子:由于我们只能向下和向左移动,因此我们将为每个组合运行递归循环可以采取的步骤。下面是上述步骤的实现。C++JavaPython3C#PHPJavascriptC++JavaPython3C#PHPJavascriptC++JavaPython...

  顶点覆盖问题|设置 2(树的动态规划解决方案)

📅  最后修改于: 2021-09-17 06:56:14        🧑  作者: Mango

无向图的顶点覆盖是其顶点的子集,因此对于图的每条边 (u, v),“u”或“v”都在顶点覆盖中。尽管名称是 Vertex Cover,但该集合涵盖了给定图的所有边。找到图的最小尺寸顶点覆盖的问题是 NP 完全的。但它可以在多项式时间内解决树。在这篇文章中,讨论了二叉树的解决方案。相同的解决方案可以扩展到 n 叉树。例如,考虑以下二叉树。最小的顶点覆盖为 {20, 50, 30},顶点覆盖的大小为 ...

  长度为 k 的回文子序列的数量,其中 k &lt;= 3

📅  最后修改于: 2021-09-17 06:56:21        🧑  作者: Mango

给定一个长度为 n 的字符串S和一个正整数 k。任务是找到长度为 k 的回文子序列的数量,其中 k <= 3。例子:对于k = 1,我们可以很容易地说字符串的字符数将是答案。对于k = 2,我们可以很容易地制作成对相同的字符,因此我们必须维护字符串中每个字符的计数,然后计算现在随着 k 的增加,它变得很难找到。如何找到k = 3 的答案?所以想法是看到长度为3的回文将是TZT格式,所以我们要维护两...

  通过水平或垂直放置给定的 N 个矩形来最大化上边界的长度

📅  最后修改于: 2021-09-17 06:56:28        🧑  作者: Mango

给定一个成对向量,V[]表示从1到N编号的N 个矩形的宽度和高度,这些矩形与水平轴接触放置,并按数字顺序从左到右相邻。任务是找到通过水平或垂直放置每个矩形形成的上边界的最大长度。红线表示图的上边界例子:Input:N = 5, V[] = {{2, 5}, {3, 8}, {1, 10}, {7, 14}, {2, 5}}Output:68Explanation:Place the first a...

  通过用最小可能值 arr[j] + |j – i| 替换每个数组元素来修改数组

📅  最后修改于: 2021-09-17 06:56:35        🧑  作者: Mango

给定一个大小为N的数组arr[],任务是为每个索引找到一个值,使得索引i处的值是arr[j] + |j – i|其中1 ≤ j ≤ N,任务是为从1 到 N 的每个索引找到最小值。例子:Input:N = 5, arr[] = {1, 4, 2, 5, 3}Output:{1, 2, 2, 3, 3}Explanation:arr[0] = arr[0] + |0-0| = 1arr[1] = a...

  每个节点到所有其他节点的距离之和最大

📅  最后修改于: 2021-09-17 06:56:41        🧑  作者: Mango

给定一棵树,有N 个节点和N-1 个边,根为 1,并给定一个N-1整数数组。任务是为树中的边分配权重,使得从每个节点到所有其他节点的距离总和最大。例子:Input:Output:46Assign the edge 1-2 with weight 5Assign the edge 2-3 with weight 7Assign the edge 3-4 with weight 1The distan...

  计算构造目标字符串的方法数

📅  最后修改于: 2021-09-17 06:56:47        🧑  作者: Mango

给定字符串数组A中,每个具有相同的长度和目标字符串的S,找到方法来构建给定阵列中使用的字符从字符串目标字符串的数目,使得在字符串结构形式的严格使用的字符的索引递增序列。也可以在同一个字符串使用多个字符。由于答案可能非常大,取模与 (10^9 + 7)例子:方法:我们将使用动态规划来解决这个问题。对于数组中的每个字符串,存储在其中发生的字符字符串中在共同的列表(L)的位置。我们的目标是使用索引形成严...

  最小化成本以通过给定的操作将数组减少到单个元素

📅  最后修改于: 2021-09-17 06:56:54        🧑  作者: Mango

给定一个由N 个整数和一个整数K组成的数组a[],任务是通过选择任意一对连续的数组元素并将它们替换为(a[i] + a[i+1])用于成本K * (a[i] + a[i+1])。例子:Input:a[] = {1, 2, 3}, K = 2Output:18Explanation:Repacing {1, 2} by 3 modifies the array to {3, 3}. Cost 2 *...