动态规划总结

坐标型动态规划

  • unique path: 有一个m*n的网格。问从左上角到右下角有多少种不同的走法?

  • unique path II: 有一个m*n的网格,网格上有若干障碍物,不能经过障碍物。问从左上角到右下角有多少种不同的走法?

  • minimum path sum: 有一个m*n的网格,每个网格中都有一个非负数,求从左上角到右下角的所有路径中的最小路径和是多少?能试着返回这条最小路径吗(使用dp)?

  • bomb enemy: 有一个m*n的网格,每个网格上能放置空、敌人、墙三种中的一种,炸弹只能放置在空中,且能炸死同行同列的所有敌人,但是不能穿透墙,问在网格中放置一枚炸弹最多能炸死多少敌人?

序列型动态规划

  • paint haose: 有一排N栋房子,每栋房子要漆成3种颜色中的一种,任何两栋相邻的房子不能漆成同样的颜色,房子i染成第j中颜色的花费是cost[i][j],问油漆这些房子的最小花费是多少?

  • paint hause II: 有一排N栋房子,每栋房子要漆成K中颜色 中的一种,任何两栋相邻的房子不能漆成同样的颜色,房子i染成第j中颜色的花费是cost[i][j],问油漆这些房子的最小花费是多少?

    • 确定状态
    • 状态转移方程
    • 初始化和边界情况
    • 计算顺序
  • hause robber: 一排房子,小偷偷房子,相邻房子不能偷,问小偷最多能偷多少金币?

  • hause robber II: 一排房子变成一圈房子,还是相邻房子不能偷,问小偷最多能偷多少金币?

    ​ 分两种情况:

    • 第一个房子不偷的情况,最大的偷盗金额就是第1栋~第N栋
    • 第一个房子偷的情况,最大的偷盗金额就是第1栋~第N-1栋
  • 股票题

  • 最长上升子序列

  • 俄罗斯套娃信封: 给定N个信封的长度和宽度,如果一个信封的长度和宽度分别小于另一个信封的长度和宽度,则这个信封可以放入各一个信封里面,问最多可以嵌套放置多少个信封?

    ​  这个题类似于无矛盾的球队那一题:每个队员有年龄和实力两个属性,当球员间的年龄和实力不成正比例时会产生矛盾,问要组建一支没有矛盾的球队且这支球队的最强实力是多少?结题的方法是先对球员两个属性中的一个属性进行排序,比如说年龄,然后以年龄排序后的这个序列中查找最长上升子序列即可。简而言之就是先排序然后使用经典的最长上升子序列算法。

    ​  套娃信封这个题不难发现与无矛盾球队这个题是一个套路,思路是先对信封的一个属性为基准进行排序,然后对另一个属性实施最长上升子序列算法,就可得出结果。

划分型动态规划

  • perfect squares: 给定一个正整数N,问最少可以将N分成几个完全平方数之和?

    • 确定状态:
      • 最后一步:关注最优策略中最后一个完全平方数j^2
      • 最优策略中n-j^2也一定被划分成最少的完全平方数之和
      • 因此需要知道n-j^2最少被分为几个完全平方数之和
      • 原来是求n被分为几个完全平方数之和,到这里子问题就显现出来了
      • 状态:设f[i]表示i最少被分成几个完全平方数之和
    • 状态转移方程
    • 初始化及边界情况
    • 计算顺序
  • Parlindrome Partition: 给定一个字符串S[0…N-1],要求将这个字符串划分成若干段,每一段都是一个回文串,求最少被划分几次?

  • copy books: 有N本书需要被抄写,第i本书有A[i]页,i=0~N-1,有k个抄写员,每个抄写员可以抄写连续的若干本书,每个抄写员的抄写速度都一样,都是一分钟一页,最少需要多少时间抄写完所有书?

      这题可以这样理解:需要找到一种分段方式,分成不超过K段,使得所有段的数字的最大值最小(极小化极大)。

  • decode ways: 有一段由a~z字母组成的字符串被加密成数字,加密方式是a-1,…,z-26,问给你一个数字,有多少种合法的解密方式?(如12 -> l or ab)

  • decode ways II: 和上面一道题的整理描述一致,就是把加密规则从原来的a-1,…,z-26改为a-0,…,z-25。想想该怎么做?

区间型动态规划

博弈型动态规划

​  博弈型动态规划不同与其他所有动态规划,它是从第一步开始分析的。

  • 石子游戏

背包型动态规划

  • backpack: 给定N个物品,重量分别为正整数A0 ~ An,一个背包最大承重是正整数M,最多能带走多重的物品?

    背包问题中数组大小和总承重有关

  • backpack II: 给定N个正整数: A0 ~ An-1,一个正整数target,求有多少种组合加起来是target,每个Ai只能使用一次?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值