汉诺塔的动态规划

本文通过汉诺塔问题探讨动态规划,介绍了汉诺塔的动态规划解法,包括汉诺塔II、III和IV的变种问题,强调了理解和找到状态转移方程的重要性。并提供了各变种问题的最少移动次数。
摘要由CSDN通过智能技术生成

还记得刚入大学的时候,当时也不会什么算法现在也啥也不知道 ,老师在讲递归的时候布置了汉诺塔这道题,因为当时是纯粹的在教C语言的语法,所以当时做这道题的方法就是纯粹的模拟暴力永远滴神。纯粹的模拟也有非常大的问题,不急耗时长,还占内存。当时也因为不太熟悉语法,卡过很长一段时间来着本蒟蒻实在是太菜了啊…在这里插入图片描述

经过暑假的学习后,也学到了一些算法的皮毛,在了解到汉诺塔的操作规律之后,也让我对动态规划的理解更深刻一些了,动态规划的解题的关键点在于找到状态和找出状态转移方程,也就是了解题目到底是在干什么,它符合哪些数学规律。

汉诺塔小游戏传送地址
在这里插入图片描述
汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一回只能移动一个圆盘。
对于汉诺塔这一类型的题目来说其实就是属于“把大象装进冰箱要几步的问题”:我们都知道只要三步,第一步,打开冰箱门;第二步,把大象放进冰箱;第三步,关上冰箱门。对于汉诺塔来说:最底下的大盘就是“大象”,而把“大象”上面的圆盘整块移走就是“打开冰箱门”;大圆盘放到目标位置就是“把大象放到冰箱”;“关上冰箱门就是”把其他圆盘按照规律的放到“大象”上,而这个步骤又可以看成下一个“把大象放进冰箱要几步的问题”(这个结果大家也明白没啥区别),形成了一个“套娃”。禁止套娃!!!在这里插入图片描述
设三柱为A(初始柱)、B(中间柱)、C(目标柱)柱,把“大象”送进冰箱,需要先把其他圆盘移到另一个柱子上,移开最顶上的圆盘只要1次,移开两个圆盘就需要3次(把第一个圆盘移到B柱一次,把第二个圆盘移到C柱,再将一号盘移到二号盘上面——C柱),移开三个圆盘需要7次(重复上一个步骤把一、二号移到B柱-3步,把三号盘移到C柱-1步,把一、二号盘移到C盘上-3步)…由此可见,设汉诺塔移动步数为F(n),则F(n)=2F(n-1)+1,显而易见F(1)=1;所以F(n)=2^n-1就是汉诺塔的递推式。(单纯的找规律得递推式也很快)
接下来几道汉诺塔的变种题我就不解释了,做法是一样的在这里插入图片描述

汉诺塔II HDU - 1207

原题传送
Problem Description

经典的汉诺塔问题经常作为一个递归的经典例题存在。可能有人并不知道汉诺塔问题的典故。汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一回只能移动一个圆盘。有预言说,这件事完成时宇宙会在一瞬间闪电式毁灭。也有人相信婆罗门至今仍在一刻不停地搬动着圆盘。恩,当然这个传说并不可信,如今汉诺塔更多的是作为一个玩具存在。Gardon就收到了一个汉诺塔玩具作为生日礼物。
Gardon是个怕麻烦的人(恩,就是爱偷懒的人),很显然将64个圆盘逐一搬动直到所有的盘子都到达第三个柱子上很困难,所以Gardon决定作个小弊,他又找来了一根一模一样的柱子,通过这个柱子来更快的把所有的盘子移到第三个柱子上。下面的问题就是:当Gardon在一次游戏中使用了N个盘子时,他需要多少次移动才能把他们都移到第三个柱子上?很显然,在没有第四个柱子时,问题的解是2^N-1,但现在有了这个柱子的帮助,又该是多少呢?

Input

包含多组数据,每个数据一行,是盘子的数目N(1<=N<=64)。

Output

对于每组数据,输出一个数,到达目标需要的最少的移动数。

Sample Input

1
3
12

Sample Output

1
5
81

CODE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值