之前我们讲到动态规划五步中有个Guessing猜,一般情况下猜有两种情况:

  • 在猜和递归上:猜的是用于解决更大问题的子问题;
  • 在子问题定义上:如果要猜更多,就要增加更多子问题。

下面我们来看如果像背包问题那样子问题比较多,该怎么去解决?

一、Piano / Guitar Fingering

给定n个按键,找到每个键应该用哪只手指去按。假设有F个手指,刚开始手指f按在p键上,如果转移到用手指g按键q,这个转移难度为定义为d(p, f, q, g)。

动态规划的解决思路如下(红叉内的内容是因为只考虑了一个子问题而报错):

上面是“单次按键只能按一个键”,但实际上,单次按键会要同时按多个键或弦,这该怎么办呢?方法如下图所示:

二、俄罗斯方块

如果你玩俄罗斯方块有下列前提,你该如果用动态规划去设计算法?结果如下图:

三、超级玛丽奥

在超级玛丽奥上,动态规划的子问题就更多了,需要考虑最小化时间,最大化分数,最大化玛丽奥速度等,解决思路讲师没给出来,但方法都八九不离十,这里我就没进行深入了解了,后续有兴趣可以深入了解看看。

[MIT6.006] 22. Daynamic Programming IV: Guitar Fingering, Tetris, Super Mario Bro. 动态规划IV:吉他指弹,俄罗斯方块,超级玛丽奥的更多相关文章

  1. [MIT6.006] 21. Daynamic Programming III: Parenthesization, Edit Distance, Knapsack 动态规划III:括号问题,编辑距离,背包问题

    这节课主要针对字符串/序列上的问题,了解如果使用动态规划进行求解.上节课我们也讲过使用前缀和后缀的概念,他们如下所示: 接下来,我们通过三个问题来深入了解下动态规划使用前缀.后缀和子串怎么去解决括号问 ...

  2. [MIT6.006] 20. Daynamic Programming II: Text Justification, Blackjack 动态规划II:文本对齐,黑杰克

    这节课通过讲解动态规划在文本对齐(Text Justification)和黑杰克(Blackjack)上的求解过程,来帮助我们理解动态规划的通用求解的五个步骤: 动态规划求解的五个"简单&q ...

  3. [MIT6.006] 19. Daynamic Programming I: Fibonacci, Shortest Path 动态规划I:斐波那契,最短路径

    这节课讲动态规划的内容,动态规划是一种通用且有效的算法设计思路,它的主要成分是"子问题"+"重用".它可以用于斐波那契和最短路径等问题的求解上. 一.斐波那契 ...

  4. [MIT6.006] 1. Algorithmic Thinking, Peak Finding 算法思维,峰值寻找

    [MIT6.006] 系列笔记将记录我观看<MIT6.006 Introduction to Algorithms, Fall 2011>的课程内容和一些自己补充扩展的知识点.该课程主要介 ...

  5. Guitar Pro吉他指弹入门——特殊调弦

    本期文章中,我们将通过吉他打谱软件Guitar Pro 7来向大家讲解指弹曲目中所涉及的特殊调弦. 作为一个吉他手,在练琴的时候总会遇到各种各样的问题,比如说鼓手不肯跟你合作(因为打鼓往往不能露脸), ...

  6. Guitar Pro吉他指弹入门——日式指弹的pm技巧

    在上一篇指弹的文章中,笔者向大家介绍了一下美式指弹,以及他独树一帜的三指法.那么这一期的文章,我将介绍另一个指弹界的大流派--日式指弹,日式指弹曲子向来以细腻而多变的情绪以及表达出来的艳丽色彩著称,今 ...

  7. Guitar Pro吉他指弹入门——美式指弹

    说起指弹吉他,很多身边的琴友首先反应到的是押尾桑,岸部真明,伍伍慧等等指弹艺术家的日式指弹.笔者在初涉指弹的时候,也是如此,但是随着学习的加深,首先认识到了汤米大神(Tommy Emmanuel),然 ...

  8. [MIT6.006] 9. Table Doubling, Karp-Rabin 双散列表, Karp-Rabin

    在整理课程笔记前,先普及下课上没细讲的东西,就是下图,如果有个操作g(x),它最糟糕的时间复杂度为Ο(c2 * n),它最好时间复杂度是Ω(c1 * n),那么θ则为Θ(n).简单来说:如果O和Ω可以 ...

  9. [MIT6.006] 23. Computational Complexity 计算复杂度

    这节课主要讲的计算复杂度,一般有三种表达不同程度的计算复杂度,如下图所示: P:多项式时间: EXP:指数时间: R:有限时间内. 上图还给了一些问题的计算复杂度的对应结果,关于一些细节例如NP, N ...

随机推荐

  1. Python+Appium自动化测试(11)-location与size获取元素坐标

    appium做app自动化测试过程中,有时需要获取控件元素的坐标进行滑动操作.appium中提供了location方法获取控件元素左上角的坐标,再通过size方法获取控件元素的宽高,就可以得到控件元素 ...

  2. LVM创建及管理

    安装lvm yum install -y lvm yum install -y lvm

  3. 多测师讲解python __for 循环___高级讲师肖sir

    横向输出 1.遍历字符串 2.遍历列表 3.遍历元组 方法一: 方法二: 方法三: #循环字典:方法一# dict1={"name":"zhihao",&quo ...

  4. 女儿拿着小天才电话手表问我App启动流程

    前言 首先,new一个女儿, var mDdaughter = new 女儿("6岁","漂亮可爱","健康乖巧","最喜欢玩小天 ...

  5. c# 误区系列(一)

    前言 整理很早以前认为的一些误区,准备整理一个系列.新手可以看下,然后大佬指点一下是否哪些地方错了. 正文 值类型存在栈上,引用类型存在堆上 很多人认为用这句话来解释值类型和栈类型的区别,甚至有些文章 ...

  6. MeteoInfoLab脚本示例:加载图片和透明图层

    MeteoInfoLab的georead函数提供了读取shape文件.image文件(JPG.PNG等,需要有相应的地理定位文件)文件生成图层的功能(事实上shaperead也是同样的功能,不过函数名 ...

  7. 机器分配----线性dp难题(对于我来说)

    题目: 总公司拥有高效设备M台, 准备分给下属的N个分公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值.其中M <= 15, ...

  8. 对于某东平台XX娃娃的用户体验进行(严肃、限速)数据分析

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 本次的爬取目标是某东的一个商品,但从来没有用过,所以本人很好奇.我们就采集这 ...

  9. vue知识点11

    1. Vue.js 是什么       Vue是一套用于构建用户界面的渐进式框架 2. vue的环境搭建(Vue2 ) 3. 经典的hello world         new Vue({      ...

  10. windows18.04远程桌面连接ubuntu16.04

    方法1: https://www.cnblogs.com/xuliangxing/p/7642650.html 方法2: 也可以通过在ubuntu上安装samba.