
ACM-汉诺塔
文章平均质量分 54
路小白_zZ
这个作者很懒,什么都没留下…
展开
-
uva 1414(dp)
题意:汉诺塔问题,把A柱上n个圆盘全部移到B或C柱需要的步数,不同的是给出了一个序列,AB表示把A柱顶部的圆盘移到B柱顶上(按规则),这个序列每次从左到右扫描,找到可执行的第一个指令就执行一次,然后再从头扫描,同一个圆盘不能连续移动两次。问步数。 题解:因为序列给出,移动的顺序就是固定的,可以推出来。在序列不变的情况下,随着圆盘数量的增加,移动次数线性增加,可以得到如下递推式 f(1) = 1原创 2015-07-25 14:54:31 · 856 阅读 · 0 评论 -
uva 254(hanoi)
题意:汉诺塔问题,有三根柱子,第一个柱子上套n个圆盘,问走m步后每个柱子上有多少个圆盘。一般汉诺塔的目标状态是把盘子从第一根移到第三根柱子上,这题是如果n是奇数,目标状态是把盘子从第一根移到第二根柱子上。题解:由于m可能取到2^100-1,用java的BIgnumber类会更好写,思路是先用一个数组hanoi表示最后每个柱子上会有多少个圆盘,a、b、c表示三根柱子初始是要将圆盘从a柱借助b柱移原创 2015-04-30 09:24:38 · 786 阅读 · 0 评论 -
uva 10254(四柱汉诺塔)
题意:给出四柱汉诺塔上初始柱子上圆盘的数量n,问最优多少次移动可以移动到另一个柱子上。 题解:可以参考四柱汉诺塔之初步探究和四柱汉诺塔实现这两篇论文,理解四柱汉诺塔的原理。 但是这道题n是从1到10000,递归太多层,而且需要用到大数,所以要找规律,f[i] = f[i - 1] + 2^k,k从1开始每k+1次计算f[i]后增大1,初始f[1] = 1。import java.math.Bi原创 2015-07-18 09:33:50 · 1003 阅读 · 1 评论