hdu 1995汉诺塔V 递推

经典汉诺塔系列的题。先回忆一下普通汉诺塔的解决方法:

(1)将A上n-1个盘子借助C座线移到B座上;

(2)把A座上剩下的一个盘移到C座上;

(3)将n-1个盘从B座借助于A座移到C座上。

 

本题求:n阶汉诺塔,上数第k个盘子的移动次数

分析:第K个盘子的移动与第k个盘子上的盘子移动无关,所以问题转换为n-k+1阶汉诺塔中第一个盘子的移动次数。

然后看上述三个步骤中,(2)中第K个盘子未移动,所以递推公式为:f(n) = 2 * f(n-1)

由于问题已经转化成n-k+1阶汉诺塔,故所求通项f[n]=2^(n-k)。

#include<stdio.h> 
#include<math.h> 
int main() 
{
    int c,n,k; 
    scanf("%d",&c); 
    while(c--) 
    { 
        scanf("%d %d",&n,&k); 
        printf("%I64d\n",(__int64)pow(2,n-k)); 
    } 
    return 0; 
} 

 

posted @ 2014-03-01 14:46  xtaq  阅读(112)  评论(0编辑  收藏  举报