动态规划

  • dp与贪心
    • 经典例题1.
    • 思路
    • 那该怎么避免贪心的“鼠目寸光”呢?
    • 性质
    • 总结一下:
  • dp的两个名词:
    • 无后效性
    • 最优子结构
  • Dp的一般思路:

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的一般思路:

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

[动态规划入门] 记录动态规划的学习!相关推荐

  1. LQ训练营(C++)学习笔记_动态规划入门

    动态规划入门 五.动态规划入门 1.动态介绍 1.1动态规划基本思路 1.2 动态规划基本概念 1.2.1 阶段 1.2.2 状态 1.2.3 决策 1.2.4 状态转移方程 1.2.5 策略 1.3 ...

  2. 【精品计划1】动态规划入门到熟悉,看不懂来打我啊

    持续更新...... 2.1斐波那契系列问题 2.2矩阵系列问题 2.3跳跃系列问题 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些变形选讲 2.1斐波那契系列问题 在数学上,斐波纳 ...

  3. 动态规划入门看这篇就够了,万字长文!

    今天是小浩算法 "365刷题计划" 动态规划 - 整合篇.大家应该期待已久了吧!奥利给! 01 PART 动态规划是啥 我们把要解决的一个大问题转换成若干个规模较小的同类型问题,当 ...

  4. 动态规划入门到熟悉,看不懂来打我啊

    动态规划入门到熟悉,看不懂来打我啊 兔子hebtu666 本文链接:https://blog.csdn.net/hebtu666/article/details/100585136 2.1斐波那契系列 ...

  5. 动态规划算法php,php算法学习之动态规划

    动态规划程序设计是对解最优化问题的一种途径.一种方法,最终问题的最优解可以通过前面子问题的最优解推导出来.下面小编为大家整理了,希望能帮到大家! 对于动态规划这个算法,自己学习的还不是很透彻,简单的总 ...

  6. 动态规划入门之国王的金矿

    最近学习算法,对动态规划不太了解,使用的时候照搬转移方程式,知其然不知其所以然,今天看到一篇动态规划的教程,解释得非常通俗,原文在这里[动态规划入门教程] (http://blog.csdn.net/ ...

  7. 《强化学习与最优控制》学习笔记(一):确定性动态规划和随机性动态规划

    写在前面的 这本书的作者是Dimitri Panteli Bertsekas教授,1942年出生于希腊雅典,美国工程院院士,麻省理工大学电子工程及计算机科学教授.Bertsekas教授因其在算法优化与 ...

  8. 很特别的一个动态规划入门教程

    很特别的一个动态规划入门教程 今天在网上看到一个讲动态规划的文章,是以01背包为例的,这文章和书上的讲解非常不一样,令我眼前一亮,于是转载一下下--- (说明一下,本人非常痛恨教材公式定理漫天飞,实际 ...

  9. C++动态规划入门习题+解析

    动态规划入门 ❤️‍

最新文章

  1. fstream,sstream,使用(习题8.16)
  2. php5.5 mysql密码无法_php – Mysql无法连接 – 访问被拒绝(使用密码是)
  3. 【Java 虚拟机原理】线程栈 | 栈帧 | 局部变量表 | 反汇编字节码文件 | Java 虚拟机指令手册 | 程序计数器
  4. 中国燃料电池行业供应规模及需求前景调研报告2021-2027年版
  5. 在ASP.NET中利JavaScript实现控件的聚焦
  6. Nginx (LNMP+https)
  7. 智慧交通day04-特定目标车辆追踪03:siamese在目标跟踪中的应用-SiamFC(2016)
  8. 《软件建模与设计: UML、用例、模式和软件体系结构》一一3.1 软件生存周期模型...
  9. 7-9 地下迷宫探索 (8 分)
  10. appium启动APP配置参数:
  11. js实现IE、谷歌浏览器打印网页内容
  12. jquery 滚动到某个div_如何使用jQuery获取父元素
  13. Android PDF阅读
  14. Charles进行弱网测试
  15. PTA 基础练习答案
  16. android系统裁剪方法
  17. Qualcomm Ramdump debugging
  18. 移远百科 | LTE-A关键技术分析
  19. MTK修改sysemUI下拉的宽度为全屏
  20. IIS 请求报503

热门文章

  1. Linux九阴真经之九阴白骨爪残卷12(日志功能)
  2. linux区分系统盘和数据盘命令
  3. 【Flink】RECEIVED SIGNAL 15: SIG SIGTERM. Shutting down as requested.
  4. %2d与%.2d的区别
  5. Linux中安装Realplayer的方法
  6. Java 文件完整性校验 sha512
  7. Java的数据结构之路——二叉树(代码实现)
  8. JS~jwPlayer为js预留的回调方法大总结
  9. linux系统有8个小时时差
  10. 什么是repair?什么是soft repair、hard repair、lane repair?