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 }

 

posted @ 2013-04-23 11:35  heity  阅读(157)  评论(0编辑  收藏  举报