动态规划

  • 最后更新:2019年5月21日

动态规划主要是对plain的优化递归。当我们看到一个递归的解决方案重复调用相同的输入时,我们可以使用动态规划来优化它。其思想是简单地存储子问题的结果,这样我们就不必在以后需要时重新计算它们。这个简单的优化将时间复杂度从指数降到多项式。例如,如果我们写一个简单的递归解斐波纳契数,我们得到指数级的时间复杂度,如果我们通过存储子问题的解来优化它,时间复杂度降低为线性。

关于动态规划的最新文章

基本概念:

先进的概念:

基本问题:

  1. 丑陋的数字
  2. 斐波纳契号
  3. 第n个加泰罗尼亚号码
  4. 钟数(划分一个集合的几种方法)
  5. 二项式系数
  6. 排列系数
  7. 铺瓷砖问题
  8. 金矿的问题
  9. 硬币改变问题
  10. 朋友配对问题
  11. 子集和问题
  12. O(和)空间中的子集和问题
  13. 和能被m整除的子集
  14. 最大可分对子集
  15. 完美的总和问题(打印带给定和的所有子集)
  16. 计算nCr % p
  17. 选择的区域
  18. 减少一个杆
  19. 与多米诺骨牌百合
  20. 绘画栅栏算法
  21. Newman-Shanks-Williams '
  22. 流水线调度
  23. Golomb序列
  24. Moser-de Bruijn序列
  25. Newman-Conway序列
  26. 找出蛇序列的最大长度
  27. 打印Newman-Conway序列的n项
  28. 使用2个变量打印斐波那契序列
  29. 反向打印斐波那契数列
  30. 甚至计数均匀长度二进制序列,以及第一和第二半比特的总和
  31. 给定长度的序列,其中每个元素都大于或等于前一个元素的两倍
  32. 最长公共子序列
  33. 最长重复子序列
  34. 最长上升子序列
  35. LCS的空间优化方案
  36. 三个字符串的LCS(最长公共子序列)
  37. 最大和双曲子序列
  38. 最大和递增子序列
  39. 递增子序列的最大乘积
  40. 计算所有具有少于k的产品的子序列
  41. 最大的序和,使三个数都不是连续的
  42. 最长的伴奏,这是佐纪之间的差异是一个
  43. 相邻元素之间的差为0或1的最大长度子序列
  44. 从前缀到前缀后的给定元素的最大递增的子序列是必须的

  45. 对链的最大长度
  46. 打印双链的最大长度
  47. 路径具有最大平均值
  48. 赢家最多可玩的游戏数
  49. 三角形中的最大路径和
  50. 三角形中的最小和路径
  51. 右数三角形中路径的最大和
  52. 最大和的子数组的大小
  53. 有特定差的对的最大和
  54. 所有1的最大大小方子矩阵
  55. 长度a、b和c的最大线段数
  56. 递归地将一个数分成三部分以得到最大的和
  57. 最大值,可以选择划分或考虑
  58. 最大权值路径结束于矩阵最后一行的任何元素
  59. 在没有两个相邻元素的2 × n网格中的最大和
  60. 二进制字符串|集合2 (O(n)时间)中0和1的最大差
  61. 可分条件下每个跳跃位置的最大路径和
  62. 最大化数组中所选数字的总和,使其为空
  63. 重复连接后创建的数组的最大子数组和
  64. 从第0行任意单元格开始,以第(N-1)行任意单元格结束的最大路径和
  65. 最小成本路径
  66. 到达终点的最小跳跃数
  67. 将给定重量装进袋子的最低成本
  68. n个数相乘的最小和
  69. 从数组中移除最小值以使max - min <= K
  70. 根据给定条件使n最小化的最小步骤
  71. 将字符串1转换为字符串2所需的最小编辑(操作)次数
  72. 使用插入、删除和复制操作写入字符的最小时间
  73. 最长的常见基本
  74. 最长公共子串(空间优化DP解决方案)
  75. 表示数字|集合1的字符串的所有子字符串的总和
  76. 找到无穷无尽的点
  77. 找到Stern双原子系列中的第n个元素
  78. 找出被盗房屋的最大可能价值
  79. 求n个变量的线性方程的解的个数
  80. 计算在游戏中达到一个给定分数的方法的数量
  81. 计算使用步骤1,2或3的方法来达到第n个楼梯
  82. 将N表示为1,3,4的和的不同方法的计数
  83. 在给定的限制条件下计算建造街道的方法
  84. 计算高度为h的平衡二叉树
  85. 当一个人最多能与一个人配对时,就计算配对数
  86. 计算从一个点到起点的路径
  87. 数一数走过一段距离的方法
  88. 具有具有不同值的连续元素的数组的计数
  89. 计数方法,以划分圆使用N不相交的和弦
  90. 使用1 × m大小的瓷砖计算铺大小为n × m的地板的方法的数量
  91. 计算一个mXn矩阵从左上到右下的所有可能路径
  92. 计算使用“1 × 4”贴图填充“n × 4”网格的方法数量
  93. 最大和相邻子数组
  94. 最小和相邻子数组
  95. 重复删除LIS后数组的大小
  96. 移除数组末端元素以最大化乘积之和
  97. 转换为严格递增的数组,变化最小
  98. 从每个下标开始的最长交替(正负)子数组
  99. 使用允许重复的数组元素总结为n的方法
  100. 带有障碍的网格中独特的路径
  101. n位非递减整数的数目
  102. 在给定的约束条件下排列N项的方法的数目
  103. 一次达到2或3步的点的概率
  104. 连续地板函数的值:F(x) = F(地板(x/2)) + x
  105. 长度为k的十进制数,是严格单调的
  106. 用大于或等于m的数求和n的不同方法

中间的问题:

  1. LOBB号码
  2. 欧拉数
  3. Delannoy数量
  4. 呼吸周号
  5. 邂逅数量
  6. 雅克布斯塔尔和雅克布斯塔尔-卢卡斯数
  7. 超级丑数(质因数在给定集合内的数)
  8. 弗洛伊德沃肖尔算法
  9. bellman算法
  10. 0 - 1背包问题
  11. 在0/1背包中打印物品
  12. 无界背包(允许重复携带物品)
  13. 庙祭
  14. 鸡蛋掉难题
  15. 骰子扔问题
  16. 休息问题
  17. 顶点覆盖问题
  18. 瓷砖堆积问题
  19. 箱堆积问题
  20. 高速公路广告牌问题
  21. 最大独立集问题
  22. 分区的问题
  23. 打印相等的阵列(分区问题)|设置1
  24. 打印数组(分区问题)|集合2的相等和集
  25. 高努力与低努力任务问题
  26. 旅行商问题|集1(朴素动态规划)
  27. 最长双调的子序列
  28. 打印最长的Bitonic子序列
  29. 最长回文的子序列
  30. 打印最长回文子序列
  31. 有O(n)空间的最长回文子序列
  32. 计算给定字符串中的所有回文子序列
  33. 最长回文子串|集合1
  34. 计算字符串|中的所有回文子字符串Set 1
  35. 长度k的回文介子的数量
  36. 索引范围内的回文基板数
  37. 最短的常见超额公顷
  38. 最大和交错子序列
  39. 最长交替子序列
  40. 最短不常见的子序列
  41. 最长的重复延时
  42. 计算不同的子序列
  43. 将不同的出现数作为子序列
  44. 最长公共增加子序列(LCS + LIS)
  45. 变化的LIS
  46. 由长度至少为K的连续段组成的LCS
  47. 打印最大和递增的子序列
  48. 最长递增的奇偶子序列
  49. Count大小为k的子序列不断增加的个数
  50. 打印最长连续递增的子序列
  51. 使用动态编程构建最长的随后随后的延续
  52. 最长曲折的子序列
  53. 矩阵中最大之字形和序列
  54. 找到一个数组的所有不同子集(或子序列)和
  55. 按字典顺序打印所有的最长公共子序列
  56. print最长公共子序列| Set 2 (print All)
  57. 最长平衡子序列的长度
  58. 大小为k且总和最小的非递减子序列
  59. 最长公共子序列,最多允许k次变化
  60. 加权作业调度
  61. 加权作业调度|集2(使用LIS)
  62. O(n Log n)时间加权作业调度
  63. 有k个硬币的路径数
  64. 创造给定值的最小硬币数量
  65. 在进入死胡同前收集最多的硬币
  66. 硬币游戏赢家,每个玩家都有三个选择
  67. 在n掷硬币中获得至少k头的概率
  68. 计算所有增加的子序列
  69. 数量达到最多k转的路径数
  70. 计算建筑物的可能方法
  71. 数一数跳跃到终点的方法
  72. 数一数在迷宫中到达目的地的方法
  73. 计算和等于一个完全正方体的所有三个一组
  74. Count没有连续1的二进制字符串的数目
  75. Count具有特定异或值的子集的数目
  76. 计算给定数字序列的可能解码
  77. 将一个集合划分为k个子集的方法的数目
  78. n个数字的和等于给定和的数的计数
  79. 计算给每个人分配唯一上限的方法
  80. 计算出现相邻两个设置位的二进制字符串的k次
  81. 在给定的约束条件下,可以使用a、b和c形成的字符串的计数
  82. 计数一个给定约束的数字的数字分组

  83. 计算从源到目的地的所有可能的行走,有k条边
  84. 计数错位排列(使元素不在原来位置上出现的排列)
  85. 计算奇数和偶数之和之差为1的N个数字的总数
  86. 最大的产品切割
  87. 葡萄酒销售的最大利润
  88. 给定和的最大大小子集
  89. 二进制字符串中0和1的最大差值
  90. 代数表达式的最大值和最小值
  91. 数组的最大平均和分区
  92. 将数组元素最大化到给定数
  93. O(n)中使用前缀和的最大子数组和
  94. 最大和子数组删除最多一个元素
  95. K不重叠连续子数组的最大和
  96. 最大积子阵|增加负积情形
  97. 找到长度小于或等于m的最大总和阵列
  98. 找到两个数组的最大点积与插入的0
  99. 在给定的重量和价值比下选择最大重量
  100. 有至少k个远元素的最大和子序列
  101. 最多两次购买和销售份额的最大利润
  102. 矩阵中从上到下的最大和路径
  103. 二进制矩阵中的最大十进制值路径
  104. 求所有元素相等的最大方子矩阵
  105. 两人会面一次最多可累积分数
  106. 大小为k的子集乘积中尾部零的最大个数
  107. 三维阵列中的最小和路径
  108. 对数组进行排序的最小插入数
  109. 给定的2D阵列中的最小汇率sublatrix
  110. 到达目的地的最小起始点
  111. 使两个字符串相同的最低成本
  112. 纸切成最小数量的正方形|集2
  113. 带有*和+的表达式的最小值和最大值
  114. 形成回文的最小插入量
  115. 制作字符串palindrome的最小删除次数
  116. 使一个回文字符串|设置为2的最小删除数
  117. 最小跳跃到达矩阵中的最后一个建筑
  118. 在两色树中具有最小色差的子树
  119. 使排序序列的最小删除数
  120. 其和等于给定数字n的最小平方数
  121. 从两边移除最小元素,使2*min大于max
  122. 最小的移动通过添加字符或附加字符串本身来形成字符串
  123. 重复删除回文子字符串后删除字符串的最小步骤
  124. 对数组进行集群/分区,使其差异平方和最小
  125. 最小和子序列,使每四个连续元素中至少有一个被选中
  126. 使最长公共子序列的长度为k的最小代价
  127. 通过删除数字使两个字符串相同的最小成本
  128. 最少的时间完成任务而不跳过两个连续的任务
  129. 以等于单元格值的跳转到达目的地所需的最小单元格
  130. 将一个字符串转换为另一个字符串的删除和插入的最小数目
  131. 查找数组的最小调整代价
  132. 查找字符串是k-palindrome或不是|设置1
  133. 查找字符串是k-palindrome或不是|套2
  134. 找出涉及加权作业调度的作业
  135. 以循环的方式求最长递增子序列
  136. 在给定约束条件的矩阵中找出最长路径
  137. 找出乘火车到达目的地的最低费用
  138. 求最小和,使每三个连续的元素中有一个被取
  139. 查找给定字符串中字符串作为子序列出现的次数
  140. 找出从给定的起始字符开始的最长连续路径的长度
  141. 查找一个字符串的最长子序列的长度,该字符串是另一个字符串的子字符串
  142. 求最长的双序列,使其递增部分和递减部分来自两个不同的数组
  143. 通配符模式匹配
  144. 具有三个符号(*,+,?)的通配符模式匹配
  145. 动态规划|通配符模式匹配|线性时间和常量空间
  146. 检查是否有任何有效的序列是可被m可分开的
  147. 在二维矩阵中检查可能的路径
  148. 检查是否可能与给定电源交叉矩阵
  149. 检查是否可以将一个字符串转换为另一个字符串
  150. 给定一个大数,检查一组数字是否能被8整除
  151. Hosoya的三角形
  152. 游戏的最佳策略
  153. 最优二叉搜索树
  154. k enversions的排列数
  155. 最大可分对子集
  156. 所有子集的平均值之和
  157. 计算从1到n的所有数字的和
  158. n位非递减数的总数
  159. 在圆中连接点的非交叉线
  160. 动态规划|搭建桥梁
  161. 矩阵中的最长增加路径
  162. 前缀矩阵(或2D阵列)
  163. 多级图(最短路径)
  164. n位数踩踏号码的数量
  165. 能被8整除但不能被3整除的子字符串的数目
  166. 使(Ai & Aj) = 0的有序对数
  167. 用n个不同的整数组成堆的方法的数目
  168. 把n写成两个或多个正整数的和的方法
  169. 修改数组使相邻差的和最大化
  170. 每次(1到n)所有组合的乘积的总和
  171. 将子矩阵变换一次,使二进制矩阵最大化
  172. 没有重复字符的最长子字符串的长度
  173. 最长偶数长度的子串,使前半段和后半段之和相等
  174. 有向加权图中有k条边的最短路径
  175. 安排球的方法,使相邻的球是不同类型的
  176. 通过删除0或更多字符将一个字符串转换为其他字符的方法
  177. 平衡表达式,给定的位置有开括号
  178. 从二进制数组的每个下标开始的最长交替子数组
  179. 将一个集合分成两个子集,使子集和的差最小
  180. 金字塔形式(随后递减)连续阵列使用减少操作

困难的问题:

  1. parindrome分区
  2. 自动换行问题
  3. 移动数字键盘问题
  4. 画家的隔断问题
  5. 布尔Parenthesization问题
  6. 桥梁和火炬问题
  7. 0-1背包问题的空间优化DP解
  8. 矩阵链乘法
  9. 在矩阵链乘法问题中打印方括号
  10. 矩阵中回文路径的数目
  11. 最大的和为0的矩形子矩阵
  12. 能被k整除的最大的矩形子矩阵
  13. 1和0个数相等的最大面积矩形子矩阵
  14. 最大和双子阵
  15. 二维矩阵中的最大和矩形
  16. 不包含某些元素的最大子数组和
  17. 给定字符串的最大权值变换
  18. 使用两次遍历收集网格中的最大点
  19. K重叠连续子阵列的最大和
  20. 如何使用给定的四个键打印最大A的A.
  21. 最大化arr[j] - arr[i] + arr[l] - arr[k],使i < j < k < l
  22. 通过买卖股票最多k次获得最大利润
  23. 最大点从矩阵的左上角到右下角,然后返回
  24. 检查行或列交换是否产生所有1的最大大小二进制子矩阵
  25. 最小代价多边形三角剖分
  26. 使用不同成本的反转操作对字符串排序的最小成本
  27. 根据给定的移除元素的规则找到数组的最小可能大小
  28. 数组中不属于递增或递减子序列的最小元素数
  29. 计算将两个字符串的LCS长度增加1的方法
  30. 数组中的AP(算术进展)子程的数量
  31. 数组的计数,其中所有相邻元素使其中一个元素与另一个元素相除
  32. 右侧的NGEs数
  33. 最长的等差数列
  34. 最长的几何级数
  35. 树| Set-1的动态规划
  36. 树| Set-2的动态规划
  37. 所有的方法都是添加括号来求值
  38. 两个字符串的最短组合
  39. 检查是否所有人都可以在两台机器上投票
  40. 查找一个字符串是否与其他两个字符串交叉
  41. 最长的重复和不重叠子串
  42. 骑士留在棋盘上的概率
  43. 子序列的个数为a^i b^j c^k
  44. 字符串中可被n整除的子序列数
  45. 打印最短公共超序列
  46. 最小长度的字符串,重复替换两个互不相邻的字符串
  47. 插入一个字符以增加LCS 1的方法的数量
  48. 在相同高度的节点之间允许k次跳转的树的遍历
  49. 找出所有集n位的k位数的组合,其中1 <= n <= k是有序的

快速链接:

  1. 前20个动态规划面试问题
  2. 关于动态规划的习题
  3. 关于动态规划的小测验

如果你喜欢Geeksfo188金宝搏滚球投注rGeeks并想投稿,你也可以写一篇文章并将你的文章邮寄到contribute@geeksforgeeks.org。金宝搏比分看到你的文章出现在geeksforgeks主页,并帮助其他极客。188金宝搏滚球投注

如果您发现任何不正确的任何内容,请写出评论,或者您想要共享有关上面讨论主题的更多信息。




我个人的笔记 arrow_drop_up