【ybt】【基算 递推 课过 例2】奇怪汉诺塔
发布日期:2021-05-06 16:01:24 浏览次数:21 分类:原创文章

本文共 1385 字,大约阅读时间需要 4 分钟。

奇怪汉诺塔

题目链接:


题目大意

汉诺塔问题,条件如下:

  • 这里有 A、B、C 和 D 四座塔。
  • 这里有 个圆盘, 的数量是恒定的。
  • 每个圆盘的尺寸都不相同。
  • 所有的圆盘在开始时都堆叠在塔 A 上,且圆盘尺寸从塔顶到塔底逐渐增大。
  • 我们需要将所有的圆盘都从塔 A 转移到塔 D 上。
  • 每次可以移动一个圆盘,当塔为空塔或者塔顶圆盘尺寸大于被移动圆盘时,可将圆盘移至这座塔上。

请你求出将所有圆盘从塔 A 移动到塔 D,所需的最小移动次数是多少

解题思路

显而易见,这是一道四塔汉诺塔问题

首先我们考虑三塔的汉诺塔问题。

众所皆知三塔是设 d ( n ) d(n) d(n) n n n 个盘子的最优解,将 A A A n − 1 n-1 n1 个盘子放置到 B B B ,最优步数为 d ( n − 1 ) d(n-1) d(n1) ;再将剩下的 1 1 1 个盘子放到 C C C ,最后将 B B B 上的 n − 1 n-1 n1 个盘子放到 C C C ,最优步数也为 d ( n − 1 ) d(n-1) d(n1) ,故有递推式 d ( n ) = 2 ∗ d ( n − 1 ) + 1 d(n)=2*d(n-1)+1 d(n)=2d(n1)+1

现在我们再考虑四塔的汉诺塔问题。

我们也设 f ( n ) f(n) f(n) 表示有 n n n 个盘时四塔汉诺塔的最优解。
我们把 B B B 看做一个中转,将 j j j 个盘移到 B B B 上,最优步数为 f ( j ) f(j) f(j)
那么还剩下 n − j n-j nj 个盘子,由于 B B B 上已经有了盘子,剩下的 A A A C C C D D D 就构成了一个三塔汉诺塔问题,最优步数为 d ( n − j ) d(n-j) d(nj)
最后将 B B B 上的 j j j 个盘子移动到 D D D 上,最优步数也是 f ( j ) f(j) f(j)
则递推式为:
f ( n ) = m i n { 2 ∗ f ( j ) + d ( n − j ) }                    0 ≤ 1 ≤ n \begin{array}{l}f(n)=min\{2\ast f\left(j\right)+d\left(n-j\right)\}\\\;\;\;\;\;\;\;\;\;0\leq1\leq n\end{array} f(n)=min{ 2f(j)+d(nj)}01n
我们最后枚举 j j j ,对答案取 min ⁡ \min min 即可。

code

#include<iostream>#include<cstdio>using namespace std;int d[20];int f[20];int main(){   	for(int i=1;i<=12;i++)		d[i]=2*d[i-1]+1;	f[1]=1;	cout<<1<<endl;	for(int i=2;i<=12;i++)	{   		f[i]=0x3f3f3f3f;		for(int j=1;j<=i;j++)			f[i]=min(f[i],2*f[j]+d[i-j]);		cout<<f[i]<<endl;	}}
上一篇:【ybt】【基算 递推 课过 例3】数的划分
下一篇:【ybt】【基算 递推 课过 例1】错排问题

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2025年03月20日 03时00分55秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

阿里大牛手撕SpringBoot,Cloud,Nginx与Docker,你凭什么搞不懂 2019-03-04
结局已定,一点不慌,秋招京东三面,给了意料之中的20KOffer。 2019-03-04
Java开发5年的我偶然被几条朋友圈打击,成功点燃,别说了,不去阿里对不起自己! 2019-03-04
面试清单(Java岗):算法+Spring+中间件+设计模式+Java+JVM+数据库 2019-03-04
凭借这份pdf,安卓顺利转行Java,成功4面拿下美团offer 2019-03-04
团体程序设计天梯赛-练习集 L1-006 连续因子 (20分) 2019-03-04
编程技巧妙用 2019-03-04
团体程序设计天梯赛-练习集 L1-023 输出GPLT (20分) 2019-03-04
团体程序设计天梯赛-练习集 L2-007 家庭房产 (25分) 并查集思想+坑点分析 2019-03-04
暴打算法:王者级数据结构与LeetCode笔记,一路绿灯杀进字节Java岗 2019-03-04
团体程序设计天梯赛-练习集 L2-020 功夫传人 (25分) dfs深搜 2019-03-04
不愧是Alibaba技术官,随便甩出本kafka限量笔记,都火遍全网 2019-03-04
爱了!腾讯技术官手写SpringCloud笔记,GitHub已标星81.6k 2019-03-04
惊喜万分!全靠这份999页Java面试宝典,我刚拿到美团offer 2019-03-04
蘑菇街被裁,奋战7个月拿下字节跳动offer 2019-03-04
三面阿里Java岗被挂,竟获内推名额,历经5面拿下口碑offer 2019-03-04
整合:2021年已收录GitHub的最新、最全、最实用的Java岗面试真题 2019-03-04
限时开源!公布半小时下载量达10W:阿里大牛出品「MyCat笔记」 2019-03-04
阿里Java全线成长宝典,从P5到P8一应俱全 2019-03-04
Java程序员面试涨薪手册,字节21火山版强势来袭 2019-03-04