汉诺塔问题变形题
问题描述:
在经典汉诺塔的基础上加一个条件,即,如果再加一根柱子(即现在有四根柱子a,b,c,d),计算将n个盘从第一根柱子(a)全部移到最后一根柱子(d)上所需的最少步数,当然,也不能够出现大的盘子放在小的盘子上面。注:1<=n<=64;
#include<stdio.h> #include<math.h> #define M 99999999 int main() { int i,n,x,min,f[65]; f[1]=1; f[2]=3; for(i=3;i<=65;i++) { min=M; for(x=1;x<i;x++) if(2*f[x]+pow(2,i-x)-1<min) min=2*f[x]+(int)pow(2,i-x)-1; f[i]=min; } while(~scanf("%d",&n)) printf("%d\n",f[n]); return 0; }
hdu 1207汉诺塔II 递推,布布扣,bubuko.com
原文:http://www.cnblogs.com/xtaq/p/3575099.html