0
点赞
收藏
分享

微信扫一扫

算法题总结(八)

12a597c01003 2022-05-05 阅读 62

按照方法分类

(三)动态规划问题

思路:四个步骤:

  • 问题拆解,找到问题之间的联系,即当前问题受到前面问题的影响
  • 状态定义
  • 转移方程推导(有一维、二维的dp)
  • 具体实现

1、 约瑟夫环问题

2、 剪绳子问题

3、 丑数问题

4、 n个骰子的点数

5、 斐波那契数列

6、 跳台阶在这里插入图片描述

7、 最小花费爬楼梯

  • dp[i]=min{dp[i−1],dp[i−2]}+cost[i]}

8、 最长公共子序列

  • 当两个数组或者字符串要用动态规划时,可以把动态规划定义成两维的 dp[i][j] ,其含义是在 A[0:i] 与 B[0:j] 之间匹配得到的想要的结果;

  • 状态方程

    • dp[i][j]=dp[i−1][j−1]+1, 当 text1[i - 1] == text2[j - 1];text1[i−1]==text2[j−1];
    • dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])dp[i][j]=max(dp[i−1][j],dp[i][j−1]), 当 text1[i - 1] != text2[j - 1]text1[i−1]!=text2[j−1]
      在这里插入图片描述

9、 最长公共子串:要连续

子序列可以不连续,子数组一定要连续

10、 一个机器人在m×n大小的地图的左上角(起点)。机器人每次可以向下或向右移动。机器人要到达地图的右下角(终点)。可以有多少种不同的路径从起点走到终点?

11、 把数字翻译成字符串

12、 兑换零钱

  • dp[i]表示凑成面额i所需要的最少货币数,dp[i]=min(dp[i],dp[i-a[j]])(a[j]表示货币面额)在这里插入图片描述
    在这里插入图片描述
举报

相关推荐

0 条评论