[动态规划入门] 记录动态规划的学习!
动态规划
- dp与贪心
- 经典例题1.
- 思路
- 那该怎么避免贪心的“鼠目寸光”呢?
- 性质
- 总结一下:
- dp的两个名词:
- 无后效性
- 最优子结构
- Dp的一般思路:
dp与贪心
贪心是我们一开始就接触的算法,
又因为贪心和dp有关联所以这里先提贪心
经典例题1.
思路
如果你是新手的话
那么你可能会 按先用大的来凑
然后再用小的
没错这就是贪心了,顾名思义和你的想法差不多
贪心是一种 只考虑眼前情况 的策略
官方点的话是这样的
贪心算法在有最优子结构的问题中尤为有效
但是这题如果使用贪心是错的
我们考虑一组新的硬币面值:1,5,11.
于是有了一个反例:
如果我们要凑出15,
贪心策略是:
15 = 11+41,共用5枚硬币。
而最佳策略是:
15 = 35,共用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的一般思路:
- 看是否满足两个性质
- 将大问题转换成小问题
- 设计状态,考虑当前需要求出的是什么
- 设计转移方程
[动态规划入门] 记录动态规划的学习!相关推荐
- LQ训练营(C++)学习笔记_动态规划入门
动态规划入门 五.动态规划入门 1.动态介绍 1.1动态规划基本思路 1.2 动态规划基本概念 1.2.1 阶段 1.2.2 状态 1.2.3 决策 1.2.4 状态转移方程 1.2.5 策略 1.3 ...
- 【精品计划1】动态规划入门到熟悉,看不懂来打我啊
持续更新...... 2.1斐波那契系列问题 2.2矩阵系列问题 2.3跳跃系列问题 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些变形选讲 2.1斐波那契系列问题 在数学上,斐波纳 ...
- 动态规划入门看这篇就够了,万字长文!
今天是小浩算法 "365刷题计划" 动态规划 - 整合篇.大家应该期待已久了吧!奥利给! 01 PART 动态规划是啥 我们把要解决的一个大问题转换成若干个规模较小的同类型问题,当 ...
- 动态规划入门到熟悉,看不懂来打我啊
动态规划入门到熟悉,看不懂来打我啊 兔子hebtu666 本文链接:https://blog.csdn.net/hebtu666/article/details/100585136 2.1斐波那契系列 ...
- 动态规划算法php,php算法学习之动态规划
动态规划程序设计是对解最优化问题的一种途径.一种方法,最终问题的最优解可以通过前面子问题的最优解推导出来.下面小编为大家整理了,希望能帮到大家! 对于动态规划这个算法,自己学习的还不是很透彻,简单的总 ...
- 动态规划入门之国王的金矿
最近学习算法,对动态规划不太了解,使用的时候照搬转移方程式,知其然不知其所以然,今天看到一篇动态规划的教程,解释得非常通俗,原文在这里[动态规划入门教程] (http://blog.csdn.net/ ...
- 《强化学习与最优控制》学习笔记(一):确定性动态规划和随机性动态规划
写在前面的 这本书的作者是Dimitri Panteli Bertsekas教授,1942年出生于希腊雅典,美国工程院院士,麻省理工大学电子工程及计算机科学教授.Bertsekas教授因其在算法优化与 ...
- 很特别的一个动态规划入门教程
很特别的一个动态规划入门教程 今天在网上看到一个讲动态规划的文章,是以01背包为例的,这文章和书上的讲解非常不一样,令我眼前一亮,于是转载一下下--- (说明一下,本人非常痛恨教材公式定理漫天飞,实际 ...
- C++动态规划入门习题+解析
动态规划入门 ❤️
最新文章
- fstream,sstream,使用(习题8.16)
- php5.5 mysql密码无法_php – Mysql无法连接 – 访问被拒绝(使用密码是)
- 【Java 虚拟机原理】线程栈 | 栈帧 | 局部变量表 | 反汇编字节码文件 | Java 虚拟机指令手册 | 程序计数器
- 中国燃料电池行业供应规模及需求前景调研报告2021-2027年版
- 在ASP.NET中利JavaScript实现控件的聚焦
- Nginx (LNMP+https)
- 智慧交通day04-特定目标车辆追踪03:siamese在目标跟踪中的应用-SiamFC(2016)
- 《软件建模与设计: UML、用例、模式和软件体系结构》一一3.1 软件生存周期模型...
- 7-9 地下迷宫探索 (8 分)
- appium启动APP配置参数:
- js实现IE、谷歌浏览器打印网页内容
- jquery 滚动到某个div_如何使用jQuery获取父元素
- Android PDF阅读
- Charles进行弱网测试
- PTA 基础练习答案
- android系统裁剪方法
- Qualcomm Ramdump debugging
- 移远百科 | LTE-A关键技术分析
- MTK修改sysemUI下拉的宽度为全屏
- IIS 请求报503
热门文章
- Linux九阴真经之九阴白骨爪残卷12(日志功能)
- linux区分系统盘和数据盘命令
- 【Flink】RECEIVED SIGNAL 15: SIG SIGTERM. Shutting down as requested.
- %2d与%.2d的区别
- Linux中安装Realplayer的方法
- Java 文件完整性校验 sha512
- Java的数据结构之路——二叉树(代码实现)
- JS~jwPlayer为js预留的回调方法大总结
- linux系统有8个小时时差
- 什么是repair?什么是soft repair、hard repair、lane repair?