hdu 1207 汉诺塔II
汉诺塔问题,给你四个柱子,要把所有的盘子从1 移到 3 上
1------1
2 -----3
3 ------5
4-------9
5 -------13
6--------17
7 -------25
要是按着先把n-3个盘子移到另一个柱子上这样就有一个递推公式,f[n] = 2[n - 3] + 2 ^3-1
用12带进去发现不对,不知道为什么,后来yy了一下,能够找出关系,
希望大牛指点。。。。
1 #include <stdio.h> 2 #include <string.h> 3 #include <math.h> 4 5 long long a[65]; 6 7 void init() 8 { 9 memset(a,0,sizeof(a)); 10 int i; 11 a[0] = 0; 12 a[1] = 1; 13 a[2] = 3; 14 a[3] = 5; 15 int k = 3; 16 int w = 0; 17 for(i = 4; i <= 64; i++) 18 { 19 w++; 20 a[i] = a[i-1] + (long long)pow(2,k-1); 21 if(w == k) 22 { 23 w = 0; 24 k++; 25 } 26 } 27 } 28 29 int main() 30 { 31 init(); 32 int n; 33 while(~scanf("%d",&n)) 34 printf("%lld\n",a[n]); 35 return 0; 36 }
yy_room