一、动态规划的简介

动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。
动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。
通常许多子问题非常相似,为此动态规划法试图仅仅解决每个子问题一次,从而减少计算量:一旦某个给定子问题的解已经算出,则将其记忆化存储,以便下次需要同一个子问题解之时直接查表。这种做法在重复子问题的数目关于输入的规模呈指数增长时特别有用。

首先,动态规划和递推有些相似(尤其是线性动规),但是不同于递推的是:
递推求出的是数据,所以只是针对数据进行操作;而动态规划求出的是最优状态,所以必然也是针对状态的操作,而状态自然可以出现在最优解中,也可以不出现——这便是决策的特性(布尔性)。其次,由于每个状态均可以由之前的状态演变形成,所以动态规划有可推导性,但同时,动态规划也有无后效性,即每个当前状态会且仅会决策出下一状态,而不直接对未来的所有状态负责,可以浅显的理解为——Future never has to do with past time ,but present does.
现在决定未来,未来与过去无关。

二、动态规划大致试用的场合

三、列举一个实例


以上问题便是求解动态规划中较为经典的求最大最小值的问题

四、解决动态规划问题的三个步骤

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

  • 状态在动态规划中的作用相当于定海神针
  • 简单而言,就是解决动态规划问题需要开辟一个数组,数组可以是一维、二维或者多维(f[i] , f[i][j])
  • 确定状态需要两个意识:
  • 最后一步:

    关键点一:我们不关心前面的K-1枚硬币是怎么拼接出来27-ak的(可能有一种,也有可能有多种),而且我们甚至并不清楚ak和K,但是我们确定前面的硬币能够拼出27-ak

关键点二:因为是最优策略,所以拼出27-k的硬币数一定要最少,否则这就不是最优策略了

  • 子问题:


    注意:有些时候我们会问到这个问题为什么不可以用递归来求解,下面我们来分析一下递归代码的缺陷

    使用递归写法的结果分析图如下:会重复计算很多子节点,而且当参数比较大的时候,递归的解法的时间复杂度是非常大的,所以这道题不可以使用递归来解答。

    注意:那么我们怎么改变递归这种弊端呢?使用动态规划,将每一次的计算结果保存下来,并改变计算顺序。

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

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

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

解决这道题为什么使用动态规划比较好呢?

  • 每一步只尝试三种硬币,一共27步
  • 与递归算法相比,没有任何重复计算
  • 时间复杂度(即需要进行的步数):27 * 3 (即是O(n)的时间复杂度)

5.动态规划小结

五、上述问题的代码实现

13.最为经典的动态规划入门相关推荐

  1. c++ 多重背包状态转移方程_动态规划入门——详解经典问题零一背包

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是周三算法与数据结构专题的第12篇文章,动态规划之零一背包问题. 在之前的文章当中,我们一起探讨了二分.贪心.排序和搜索算法,今天我们来 ...

  2. 动态规划入门——详解经典问题零一背包

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是周三算法与数据结构专题的第12篇文章,动态规划之零一背包问题. 在之前的文章当中,我们一起探讨了二分.贪心.排序和搜索算法,今天我们来 ...

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

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

  4. OpenCL用于计算机领域的13个经典案例

    摘要:当使用加速器和OpenCL时,哪种类型的算法更加快速?来自弗吉尼亚理工大学的Wu Feng教授和他的团队例举了一份算法列表,分享了OpenCL常被用于计算机领域的13个经典案例. 哪种算法可以最 ...

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

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

  6. 视频教程-经典Vue从入门到案例到源码分析教程(含资料)-Vue

    经典Vue从入门到案例到源码分析教程(含资料) 张长志技术全才.擅长领域:区块链.大数据.Java等.10余年软件研发及企业培训经验,曾为多家大型企业提供企业内训如中石化,中国联通,中国移动等知名企业 ...

  7. [算法] 当今世界最为经典的十大算法--投票进行时

    当今世界最为经典的十大算法--投票进行时 ---------------------------------------- 第一部分.来自圣经的十大算法 第十名:Huffman coding(霍夫曼编 ...

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

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

  9. SUM函数超实用的13种经典用法

    100节函数课程 SUM函数相信大家都不陌生,它是最为常见的求和函数,也是职场办公必备技能的求和函数.它的作用是返回某一个单元格区域中所有数值之和(忽略文本和逻辑值),这个看似很简单的函数,但90%的 ...

最新文章

  1. 关闭oracle自动统计,禁用oracle 11g 的统计数据自动功能
  2. 大年初一,给大家发1000红包!
  3. [给ASP.NET 初学者的话]不要练功练了三年,才发现自己必须「砍掉重练」!....学习ASP.NET之前,请先把自己杯中的水倒掉...
  4. 终于,我读懂了所有Java集合——map篇(多线程)
  5. 面试:MySQL InnoDB 事务隔离
  6. SQLite的基本用法
  7. python非零返回怎么解决_Python:从命令行获取输出,该命令行以非零退出代码退出...
  8. linux-headers,如何升级linux-headers-generic?
  9. adodb.connection id password windows用户_Windows 12发布了?一款号称可以取代win10的山寨Windows系统...
  10. 最严格的身份证校验(JavaScript版)
  11. grafana导入json文件没有数据_基于SpringBoot将Json数据导入到数据库
  12. 微软小冰你这么智能 .net知道吗?
  13. Android源码下载编译(TI)
  14. 小程序发布文章-微信小程序视频教程28
  15. 小程序进阶-用户消息通知
  16. Java耗时打印工具类
  17. 路由器怎么知道外网返回的数据包发给局域网中哪台主机呢?
  18. CSS实现横向图片滚动播放
  19. 最小费用最大流之 zkw费用流与普通费用流
  20. CART回归树原理及python实现

热门文章

  1. apache 重定向tomcat端口_Tomcat
  2. org.apache.ibatis.binding.BindingException: Parameter 'username' not found. Available parameters
  3. copyTo函数、随机数产生器 RNG、轮廓的特征矩 Moment、cvGet2D函数
  4. 差异基因分析:fold change(差异倍数), P-value(差异的显著性)
  5. 第三十五课.基于贝叶斯的深度学习
  6. 微生物入侵:过程、模式与机制
  7. QIIME 2教程. 10数据导出ExportingData(2021.2)
  8. Microbiome:中科院遗传发育所揭示植物发育和氮肥共同作用下的小麦根系微生物组...
  9. 生信宝典文章集锦,你想看的都在
  10. 安卓java读取软件自身包名,android 获取第三方应用程序包名并启动 | 学步园