题目大意:经典汉诺塔问题的变形,现在给定四根柱子的汉诺塔,要求回答给定的初始塔高度,移动到到一根柱子所需要的操作次数。
思路分析:首先分析三根柱子的汉诺塔:将第个盘子从柱通过三根柱子移动到柱,然后将最大的移动到柱,最后又将个盘子通过三根柱子移动到柱。在这个过程中的操作次数为。
那么我们继续分析四根柱子的汉诺塔:
1、从A
借助C、D
将个盘子移动到B
上;
2、将第个盘子移动到C
上;
3、将第个盘子移动到D
上;
4、将第个盘子移动到D
上;
5、从B
借助A、C
将个盘子全部移动到D
上。
以上是我们的基本思路。但是这并不是最优解。在盘子较少时是显然成立的,但盘子增多时,那些多余的只有一个盘子的柱子是可以加以利用的。因此我们需要一个更合理的算法:(参考四柱加强版汉诺塔HanoiTower)
1、用柱汉诺塔算法把A柱上部分的个碟子通过C柱和D柱移到B柱上【步】;
2、用柱汉诺塔经典算法把A柱上剩余的r个碟子通过C柱移到D柱上【步】(参照上述三柱时的情况);
3、用柱汉诺塔算法把B柱上的个碟子通过A柱和C柱移到D柱上【步】;
4、依据上边规则求出所有)情况下步数,取最小值得最终解。
因此可得状态转移方程:
但是这题还没完,数据范围要求我们不得不使用高精度算法。赛时没有考虑到高精度的问题。。。。。所以牛逼。。。。