📝 动态编程

1324篇技术文档
  计算通过重复掷骰子获得给定总和的方法

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

给定一个整数N,任务是找到通过反复掷骰子来获得总和N的方法数。例子:Input:N = 3Output:4Explanation:The four possible ways to obtain N are:1 + 1 + 11 + 22 + 13Input:N = 2Output:2Explanation:The two possible ways to obtain N are:1 + 12编...

  计算移动到前端或后端以对数组进行排序的最小次数

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

给定一个大小为N的数组arr[],任务是找到使数组按非递减顺序排序所需的数组开头或结尾的最小移动。例子:Input:arr[] = {4, 7, 2, 3, 9}Output:2Explanation:Perform the following operations:Step 1: Move the element 3 to the start of the array. Now, arr[] m...

  n 个数字的最小乘法和

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

给定 n 个整数。任务是通过一次取两个相邻数字并将它们的总和 % 100 放回,直到剩下一个数字,从而最小化所有数字的乘法总和。例子 :方法:问题是矩阵链乘法动态规划的变体这个想法是将 N 个数字划分为 k 的每个可能值。递归地求解较小的部分并添加乘法并存储它们中的最小值。由于我们将它分成 k 个部分,对于每个 DPi,j我们将有 k 个分区 i<=k<j ,存储它们中的最小值。于是我们得到类似于...

  通过从任何第 i 个索引跳跃长度为 i + K * arr[i] 的数组来最大化总和

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

给定一个由N 个正整数和一个整数K组成的数组arr[],任务是通过从任何第i个节点跳(i + K*arr[i])(< N)数组的索引。例子:Input:arr[] = {1, 2, 1, 4}, K = 2Output:4Explanation:Starting index i = 0, the traversal of indices of array is {0, 2}Hence, the a...

  长度为 K 的子序列 X 使得 gcd(X[0], X[1]) + (X[2], X[3]) + &#8230; 最大化

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

给定一个大小为N的数组a。任务是找到一个长度为K的子序列X,使得gcd(X[0], X[1]) + (X[2], X[3]) + …是最大值。注:K是偶数。例子:Input:a[] = {4, 5, 3, 7, 8, 10, 9, 8}, k = 4Output:9The subsequence {4, 7, 8, 8} gives the maximum value = 9.Other subs...

  查找数组的最小调整成本

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

给定一个正整数数组,替换数组中的每个元素,使得数组中相邻元素之间的差异小于或等于给定的目标。我们需要最小化调整成本,即新旧值差异的总和。我们基本上需要最小化∑|A[i] – Anew[i]|其中 0 ≤ i ≤ n-1,n 是 A[] 的大小,Anew[] 是相邻差值小于或等于目标的数组。假设数组的所有元素都小于常数 M = 100。例子:为了最小化调整成本 ∑|A[i] – Anew[i]|对于...

  数组中 AP(算术级数)子序列的计数

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

给定一个由n 个正整数组成的数组。任务是计算数组中算术级数子序列的数量。注意:空序列或单元素序列是算术级数。 1 <= arr[i] <= 1000000。例子:由于空序列和单元素序列也是等差数列,所以我们用n(数组中元素的个数)+1来初始化答案。现在,我们需要找到长度大于或等于2的等差数列子序列。设数组的最小值和最大值分别为minarr和maxarr。观察,在所有的等差数列子序列中,公差的范围将...

  矩阵求幂

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

这是竞争性编程中最常用的技术之一。让我们首先考虑以下简单的问题。找到第 n 个斐波那契数的最小时间复杂度是多少?我们可以使用矩阵求幂在 O(Log n) 时间内找到第 n 个斐波那契数。有关详细信息,请参阅此方法 4。在这篇文章中,讨论了矩阵求幂的一般实现。因此,我们可以简单地将第二个矩阵乘以 n-2 次,然后将其与第三个矩阵相乘以得到结果。乘法可以在(log n)时间内完成,使用分而治之的算法(...

  计算乘积小于 K 的所有子序列

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

给定一个非负数组,找出乘积小于 K 的子序列的数量。例子:这个问题可以使用动态规划解决,其中 dp[i][j] = 乘积小于 i 的子序列数,使用数组的前 j 项。可以通过以下方式获得:使用前 j-1 项的子序列数 + 使用第 j 项可以形成的子序列数。C++JavaPython3C#Javascript输出:如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程...

  在 3 x N 网格中绘制 K 个单元格的方法数,以便没有 P 个连续列未绘制

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

给定三个整数N、P和K,任务是找到绘制 3 x N 网格的 K 单元格的方法数量,这样就不会绘制相邻的单元格,也不会留下连续的 P 列未绘制。注意:对角线单元不被视为相邻单元。例子:Input:N = 1, P = 3, K = 1Output:3There are 3 ways to paint 1 cell in a 3 x 1 grid.Input:N = 2, P = 2, K = 2Ou...

  G 事实 21 | Collatz 序列

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

从任意正整数 N 开始,我们将对应于 N 的 Collatz 序列定义为由以下操作形成的数字:推测但尚未证明,无论我们从哪个正整数开始;我们总是以 1 结束。例如 10 → 5 → 16 → 8 → 4 → 2 → 1一个关于 Collatz 序列的编码练习题如果你喜欢 GeeksforGeeks 并愿意做出贡献,你也可以写一篇文章并将你的文章邮寄到 review-team@geeksforgee...

  计算覆盖距离的方法数| 2套

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

给定距离N。的任务是计数的方法来覆盖1,2和3步的距离的总数。例子:Input:N = 3Output:4All the required ways are (1 + 1 + 1), (1 + 2), (2 + 1) and (3).Input:N = 4Output:7编程需要懂一点英语方法:在上一篇文章中,讨论了基于递归和动态编程的方法。在这里,我们将降低空间复杂度。可以肯定的是,要计算覆盖距...

  半完美数

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

在数论中,半完美数或伪完美数是一个自然数 n,它等于它的全部或部分真除数之和。一个半完全数等于它的所有真除数之和是一个完全数。给定一个数字,任务是检查该数字是否为半完美数字。例子:Input:40Output:The number is Semiperfect1+4+5+10+20=40Input:70Output:The number is not SemiperfectThe first fe...

  求到达楼梯第 K 步的方法数

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

给定一个大小为N的数组arr[]和一个整数K。数组表示楼梯中的破损台阶。一个人无法达到一个破碎的步骤。任务是在任何位置可以采取最大长度为2的步骤时,从0开始,找到到达楼梯中第K步的方法数。答案可能非常大。因此,打印答案模109+ 7。例子:Input:arr[] = {3}, K = 6Output:40 -> 1 -> 2 -> 4 -> 5 -> 60 -> 1 -> 2 -> 4 -> 60...

  计算通过将第一个元素和最后一个元素相同的子数组的所有元素替换为第一个元素任意次数而获得的不同序列

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

给定一个由N 个整数组成的数组arr[],任务是找到对给定数组arr[]执行以下操作任意次数后可以形成的不同序列的数量。Choose two indicesiandjsuch thatarr[i]is equal toarr[j]and update all the elements in the range[i, j]in the array toarr[i].编程需要懂一点英语例子:Input...