码迷,mamicode.com
首页 > 其他好文 > 详细

Vijos1073 4-Hanoi-Tower

时间:2014-10-05 12:50:18      阅读:350      评论:0      收藏:0      [点我收藏+]

标签:style   color   os   ar   for   sp   问题   c   on   

此题虽是数学题,但是在题解中看到一种好的找递推式的思路,在此mark

 按照惯例,从一个盘子做起. 

n=1: 1次. 

n=2: 3次. 

n=3: 借助第4根柱子,5次搞定,比3根柱子省了2次. 

以后都需要充分利用第4根柱子以减少次数. 

n=4: 把1,2,3摊开,把1搭到2上面腾出一个空柱子移4,然后把3搭上去,再用3次把1,2搭上去,共计9次. 

n=5: 把1,2,3摊开,再把1,2收到3的上面,腾出了两个空柱子,把4,5用3步移好,再次腾出了两个空柱子,把1,2摊开,然后1,2,3一并收到4上面,共计13次. 
n=6: 把1,2,3摊开,再把1,2收到3的上面,腾出了两个空柱子,相当于用3根柱子移动4,5,6(7步完成),再次腾出了两个空柱子,把1,2摊开,然后1,2,3一并收到4上面,共计17次. 

n=7: 

屏蔽5,6,7,用n=4的方法把1,2,3,4移到另一根柱子上(9次) 
此时腾出了两个空柱子,相当于用3根柱子移动5,6,7 (7次) 
屏蔽5,6,7,用n=4的方法把1,2,3,4移好(9次) 
共计25次. 

n=8: 

屏蔽6,7,8,用n=5的方法把1,2,3,4,5移到另一根柱子上(13次) 
此时腾出了两个空柱子,相当于用3根柱子移动6,7,8 (7次) 
屏蔽6,7,8,用n=5的方法把1,2,3,4,5移好(13次) 
共计33次. 

n=9: 

屏蔽6,7,8,9,用n=5的方法把1,2,3,4,5移到另一根柱子上(13次) 
此时腾出了两个空柱子,相当于用3根柱子移动6,7,8,9 (15次) 
屏蔽6,7,8,9,用n=5的方法把1,2,3,4,5移好(13次) 
共计41次. 

n=10: 

屏蔽7,8,9,10,用n=6的方法把1,2,3,4,5,6移到另一根柱子上(17次) 
此时腾出了两个空柱子,相当于用3根柱子移动7,8,9,10 (15次) 
屏蔽7,8,9,10,用n=6的方法把1,2,3,4,5,6移好(17次) 
共计49次. 
关于n个盘子如何确定分界线的问题: 

首先1到(n-1)个盘子的问题需要全部解决,把所需步数记录下来,记为 

f(1),f(2),……,f(n-1). 

若把n个盘子分成前k个和后(n-k)个,则所需步数是 

N = f(k) + 2^(n-k) - 1 + f(k) 

其中,k=1,2,3,……,(n-1) 

取最小的N值作为f(n)的值,对应的k值作为n个盘子的最佳分界线. 
利用上述方法,我们不难得到前面一些n值的最佳步数和最佳分界线,我们把结果记录到一张表上. 

由于n=0不失一般性,一并收入表中. 

其中步数 f(n) = f(k) + 2^(n-k)-1 + f(k). 

 

数学方法也就是在此基础上找规律

Vijos1073 4-Hanoi-Tower

标签:style   color   os   ar   for   sp   问题   c   on   

原文地址:http://www.cnblogs.com/polebug/p/4006775.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!