动态规划算法

动态规划

2019-05-02  本文已影响0人  topshi

动态规划题目特点

1. 计数
2.求最大最小值
3.求存在性

动态规划四个组成部分:

最值型动态规划

Coin Change
假设你有三种硬币,分别面值2元,5元和7元,每种硬币都有足够多,买一本书需要27元,如何用最少的硬币组合正好付清,不需要对方找钱。

动态规划组成部分一:确定状态

最后一步
1-不知道最优策略,但最优策略肯定是K枚硬币a_1,a_2,...,a_k面值加起来是27
2-所以肯定有一枚最后的硬币:a_k
  关键点1:不关心前面k-1枚硬币如何拼出27-a_k,甚至不知道a_k和K,但是确定了前面的硬币拼出了27-a_k
  关键点2:因为是最优策略,所以拼出27-a_k的硬币数一定要最少,否则矛盾。
子问题
1 - 需要求出最少用多少枚硬币可以拼出27-a_k
2 - 原问题是最少用多少枚硬币拼出27
3 - 原问题转化成了一个规模更小的子问题:27-a_k
4 - 设状态f(X) = 最少用多少枚硬币拼出X
最后一枚硬币只可能是2,5或7
a_k == 2f(27)应该是f(27 - 2) + 1(加上最后的一枚硬币2)
a_k == 5f(27)应该是f(27 - 5) + 1(加上最后的一枚硬币5)
a_k == 7f(27)应该是f(27 - 7) + 1(加上最后的一枚硬币7)
要求最少的硬币数:
f(27) = min{f(27 - 2), f(27 - 5), f(27 - 7)} + 1

动态规划组成部分二:转移方程

动态规划组成部分三:初始条件和边界情况

动态规划组成部分三:计算顺序

求最值型动态规划小结

计数型动态规划

Unique Paths

给定m行n列的网格,有一个机器人从左上角(0, 0)出发,每一步可以向下或者向右走一步,问有多少种不同的方式走到右下角

动态规划组成部分一:确定状态

动态规划组成部分二:转移方程

动态规划组成部分三:初始条件和边界情况

动态规划组成部分四:计算顺序

存在性型动态规划

n块石头分别在x轴的0,1,...,n-1位置,一只青蛙在石头0,想跳到石头n-1,如果青蛙在第i块石头上,它最多可以向右跳距离a_i,问青蛙能否跳到石头n-1

动态规划组成部分一:确定状态

动态规划组成部分二:转移方程

动态规划组成部分三:初始条件和边界情况

动态规划组成部分四:计算顺序

上一篇 下一篇

猜你喜欢

热点阅读