various

Strange Towers of Hanoi

题目描述

参考正常的汉诺塔问题(3根柱子),现在变成4根。

把n个盘子从A移动到D上至少需要多少步?

输入:没有输入 输出:输出12行,第i行是i个盘子至少需要几步

问题分析

正常3根柱子的汉诺塔递推公式是three[i]=three[i-1]*2+1,其中three[i]代表i个盘子至少需要多少步。

现在多了一根柱子,我们可以选择先把n个盘子中最上面的j个从A移动到B上(可用4根柱子),再把下面的n-j个盘子从A移动到D上(不能用柱子B,相当于3根柱子),再把B上的j个盘子移动到D上(可用使用4根柱子)

用four[i]代表i个盘子从A到D的最小次数,four[i]初始值“无穷大”,four[0]=0(0个盘子移动步数至少为0),递推公式four[i]=min{four[j-1]*2+three[i-j]},其中j是0~i的正整数。

代码如下: