没有合适的资源?快使用搜索试试~ 我知道了~
对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第一次接触的时候总是想不通为什么这种方法可行,这篇文章就是为了帮助大家理解动态规划,并通过讲解基本的01背包问题来引导读者如何去思考动态规划。本文力求通俗易懂,无异性,不让读者感到迷惑,引导读者去思考,所以如果你在阅读中发现有不通顺的地方,让你产生错误理解的地方,让你难得读懂的地方,请跟贴指出,谢谢!
资源推荐
资源详情
资源评论
动态规划之经典 01 背包问题
经典的 01 背包问题
对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第一次接触的时候总
是想不通为什么这种方法可行,这篇文章就是为了帮助大家理解动态规划,并通过讲解基
本的 01 背包问题来引导读者如何去思考动态规划。本文力求通俗易懂,无异性,不让读
者感到迷惑,引导读者去思考,所以如果你在阅读中发现有不通顺的地方,让你产生错误
理解的地方,让你难得读懂的地方,请跟贴指出,谢谢!
----第一节----初识动态规划--------
经典的 01 背包问题是这样的:
有一个包和 n 个物品,包的容量为 m,每个物品都有各自的体积和价值,问当从这 n
个物品中选择多个物品放在包里而物品体积总数不超过包的容量 m 时,能够得到的最大价
值是多少?[对于每个物品不可以取多次,最多只能取一次,之所以叫做 01 背包,0 表示不
取,1 表示取]
为了用一种生动又更形象的方式来讲解此题,我把此题用另一种方式来描述,如下:
有一个国家,所有的国民都非常老实憨厚,某天他们在自己的国家发现了十座金矿,
并且这十座金矿在地图上排成一条直线,国王知道这个消息后非常高兴,他希望能够把这
些金子都挖出来造福国民,首先他把这些金矿按照在地图上的位置从西至东进行编号,依
次为 0、1、2、3、4、5、6、7、8、9,然后他命令他的手下去对每一座金矿进行勘测,以
便知道挖取每一座金矿需要多少人力以及每座金矿能够挖出多少金子,然后动员国民都来
挖金子。
题目补充 1:挖每一座金矿需要的人数是固定的,多一个人少一个人都不行。国王知
道每个金矿各需要多少人手,金矿 i 需要的人数为 p[i]。
题目补充 2:每一座金矿所挖出来的金子数是固定的,当第 i 座金矿有 p[i]人去挖的话,
就一定能恰好挖出 g[i]个金子。否则一个金子都挖不出来。
题目补充 3:开采一座金矿的人完成开采工作后,他们不会再次去开采其它金矿,因
此一个人最多只能使用一次。
题目补充 4:国王在全国范围内仅招募到了 10000 名愿意为了国家去挖金子的人,因
此这些人可能不够把所有的金子都挖出来,但是国王希望挖到的金子越多越好。
题目补充 5:这个国家的每一个人都很老实(包括国王),不会私吞任何金子,也不
会弄虚作假,不会说谎话。
题目补充 6:有很多人拿到这个题后的第一反应就是对每一个金矿求出平均每个人能
挖出多少金子,然后从高到低进行选择,这里要强调这种方法是错的,如果你也是这样想
的,请考虑背包模型,当有一个背包的容量为 10,共有 3 个物品,体积分别是 3、3、5,
价值分别是 6、6、9,那么你的方法取到的是前两个物品,总价值是 12,但明显最大值是
后两个物品组成的 15。
第 1 页 共 12 页
动态规划之经典 01 背包问题
题目补充 7:我们只需要知道最多可以挖出多少金子即可,而不用关心哪些金矿挖哪
些金矿不挖。
那么,国王究竟如何知道在只有 10000 个人的情况下最多能挖出多少金子呢?国王是
如何思考这个问题的呢?
国王首先来到了第 9 个金矿的所在地(注意,第 9 个就是最后一个,因为是从 0 开始
编号的,最西边的那个金矿是第 0 个),他的臣子告诉他,如果要挖取第 9 个金矿的话就
需要 1500 个人,并且第 9 个金矿可以挖出 8888 个金子。听到这里国王哈哈大笑起来,因
为原先他以为要知道十个金矿在仅有 10000 个人的情况下最多能挖出多少金子是一件很难
思考的问题,但是,就在刚才听完他的臣子所说的那句话时,国王已经知道总共最多能挖
出多少金子了,国王是如何在不了解其它金矿的情况下知道最多能挖出多少金子的呢?他
的臣子们也不知道这个谜,因此他的臣子们就问他了:“最聪明的国王陛下,我们都没有告
诉您其它金矿的情况,您是如何知道最终答案的呢?”
得意的国王笑了笑,然后把他最得意的“左、右手”叫到跟前,说到:“我并不需要考虑
最终要挖哪些金矿才能得到最多的金子,我只需要考虑我面前的这座金矿就可以了,对于
我面前的这座金矿不外乎仅有两种选择,要么挖,要么不挖,对吧?”
“当然,当然”大臣们回答倒。
国王继续说道:“如果我挖取第 9 座金矿的话那么我现在就能获得 8888 个金子,而我
将用去 1500 个人,那么我还剩下 8500 个人。我亲爱的左部下,如果你告诉我当我把所有
剩下的 8500 个人和所有剩下的其它金矿都交给你去开采你最多能给我挖出多少金子的话,
那么我不就知道了在第 9 个金矿一定开采的情况下所能得到的最大金币数吗?”
国王的左部下听后回答道:“国王陛下,您的意思是如果我能用 8500 个人在其它金矿
最多开采出 x 个金币的话,那您一共就能够获得 x + 8888 个金子,对吗?”
“是啊,是啊……如果第 9 座金矿一定开采的话……”大臣们点头说到。
国王笑着继续对着他的右部下说到:“亲爱的右部下,也许我并不打算开采这第 9 座金
矿,那么我依然拥有 10000 个人,如果我把这 10000 个人和剩下的金矿都给你的话,你最
多能给我挖出多少个金子呢?”
国王的右部下聪明地说道:“尊敬的国王陛下,我明白您的意思了,如果我回答最多能
购开采出 y 个金币的话,那您就可以在 y 和 x+8888 之间选择一个较大者,而这个较大者就
是最终我们能获得的最大金币数,您看我这样理解对吗?”
国王笑得更灿烂了,问他的左部下:“那么亲爱的左部下,我给你 8500 个人和其余金
矿的话你能告诉我最多能挖出多少金子吗?”
“请您放心,这个问题难不倒我”。左部下向国王打包票说到。
国王高兴地继续问他的右部下:“那右部下你呢,如果我给你 10000 个人和其余金矿的
话你能告诉我最多能挖出多少金子吗?”
“当然能了!交给我吧!”右部下同左部下一样自信地回答道。
第 2 页 共 12 页
动态规划之经典 01 背包问题
“那就拜托给你们两位了,现在我要回到我那舒适的王宫里去享受了,我期待着你们的
答复。”国王说完就开始动身回去等消息了,他是多么地相信他的两个大臣能够给他一个准
确的答复,因为国王其实知道他的两位大臣要比他聪明得多。
故事发展到这里,你是否在想国王的这两个大臣又是如何找到让国王满意的答案的呢?
他们为什么能够如此自信呢?事实上他们的确比国王要聪明一些,因为他们从国王的身上
学到了一点,就是这一点让他们充满了自信。
国王走后,国王的左、右部下来到了第 8 座金矿,早已在那里等待他们的金矿勘测兵
向两位大臣报道:“聪明的两位大臣,您们好,第 8 座金矿需要 1000 个人才能开采,可以
获得 7000 个金子”。
因为国王仅给他的左部下 8500 个人,所以国王的左部下叫来了两个人,对着其中一个
人问到:“如果我给你 7500 个人和除了第 8、第 9 的其它所有金矿的话,你能告诉我你最多
能挖:“如果我给你 7500 个人和除了第 8、第 9 的其它所有金矿的话,你能告诉我你最多能
挖出多少金子吗?”
然后国王的左部下继续问另一个人:“如果我给你 8500 个人和除了第 8、第 9 的其它所
有金矿的话,你能告诉我你最多能挖出多少金子吗?”
国王的左部下在心里想着:“如果他们俩都能回答我的问题的话,那国王交给我的问题
不就解决了吗?哈哈哈!”
因为国王给了他的右部下 10000 个人,所以国王的右部下同样也叫来了两个人,对着
其中一个人问:“如果我给你 9000 个人和除了第 8、第 9 的其它所有金矿的话,你能告诉我
你最多能挖出多少金子吗?”
然后国王的右部下继续问他叫来的另一个人:“如果我给你 10000 个人和除了第 8、第
9 的其它所有金矿的话,你能告诉我你最多能挖出多少金子吗?”
此时,国王的右部下同左部下一样,他们都在为自己如此聪明而感到满足。
当然,这四个被叫来的人同样自信地回答没有问题,因为他们同样地从这两个大臣身
上学到了相同的一点,而两位自认为自己一样很聪明的大臣得意地笑着回到了他们的府邸,
等着别人回答他们提出来的问题,现在你知道了这两个大臣是如何解决国王交待给他们的
问题了吗?
那么你认为被大臣叫去的那四个人又是怎么完成大臣交给他们的问题的呢?答案当然
是他们找到了另外八个人!
没用多少功夫,这个问题已经在全国传开了,更多人的人找到了更更多的人来解决这
个问题,而有些人却不需要去另外找两个人帮他,哪些人不需要别人的帮助就可以回答他
们的问题呢?
很明显,当被问到给你 z 个人和仅有第 0 座金矿时最多能挖出多少金子时,就不需要
别人的帮助,因为你知道,如果 z 大于等于挖取第 0 座金矿所需要的人数的话,那么挖出
来的最多金子数就是第 0 座金矿能够挖出来的金子数,如果这 z 个人不够开采第 0 座金矿,
那么能挖出来的最多金子数就是 0,因为这唯一的金矿不够人力去开采。让我们为这些不
第 3 页 共 12 页
剩余11页未读,继续阅读
资源评论
hongxiang895164403
- 粉丝: 2
- 资源: 13
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功