[动态规划入门] 记录动态规划的学习!

dp与贪心

贪心是我们一开始就接触的算法,

又因为贪心和dp有关联所以这里先提贪心

经典例题1.

在这里插入图片描述

思路

如果你是新手的话

那么你可能会 按先用大的来凑

然后再用小的

没错这就是贪心了,顾名思义和你的想法差不多

贪心是一种 只考虑眼前情况 的策略

官方点的话是这样的

贪心算法在有最优子结构的问题中尤为有效

但是这题如果使用贪心是错的

我们考虑一组新的硬币面值:1,5,11.

于是有了一个反例:

如果我们要凑出15,

贪心策略是:

15 = 11+41,共用5枚硬币

而最佳策略是:
15 = 3
5,共用3枚硬币。

///
因此贪心策略就陷入了困境: 鼠目寸光
///

那该怎么避免贪心的“鼠目寸光”呢?

我们重新分析刚刚的情况:

w=15时,我们取了11,接下来面对w=4的情况。

w=15时,如果我们取5,接下来就面对w=10的情况。


我们记“凑出n需要用到的最少硬币数量”为f(n).

那么,如果我们取了11,

则: cost=f(4)+1=4+1=5.

解释:
我们用了一枚面值为11的硬币,所以加一;

接下来面对的是w=4的情况。

f(4)我告诉你等于4.

性质

我们注意到了一个很棒的性质:

f(n)只与 f(n−1),f(n−5),f(n−11) 相关。

更确切地说: f(n)=min⁡{f(n−1),f(n−5),f(n−11)}+1

总结一下:

我们可以发现
我们的答案是递推一样
直接就推出来了这就是dp了

dp的两个名词:

无后效性

一旦f(n)确定,

“我们如何凑出f(n)”就再也用不着了。

要求出f(15),

只需要知道f(14),f(10),f(4)的值,
而f(14),f(10),f(4)是如何算出来的,
对之后的问题没有影响。

未来与过去无关

最优子结构

f(n)的定义就已经蕴含了“最优”。

利用w=14,10,4的最优解,

我们即可算出w=15的最优解。


大问题的最优解可以由小问题的最优解推出

这个性质叫做“最优子结构性质”。

Dp的一般思路:

  • 看是否满足两个性质
  • 大问题转换成小问题
  • 设计状态,考虑当前需要求出的是什么
  • 设计转移方程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值