http://acm.hdu.edu.cn/showproblem.php?pid=2064

Hanno塔问题简要分析:
1:
条件为左边杆上的盘全部移到右边的杆上,条件是一次只能移动一个盘,
且不允许大盘放在小盘的上面。
思路:
把前n-1个盘看成整体,要移动第n个盘需要n-1个盘借助3从1->2,把第n个盘从1->3,把n-1个盘借助1从2->3;
故:f[n]=2*f[n-1]+1;f[1]=1;
n个盘共有2^n-1步
本题与前面的类似:
要把第n个盘从1->3,需要把n-1从1->3,3-1,1->3.
故有f[n]=3*f[n-1]+2;
f[1]=2;
化简得:f[n]=3^n-1;

3052541 2010-10-09 19:05:48 Accepted 2064 0MS 180K 679 B G++

 

 

hdu2065 hanno
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<string.h>
4 #include<math.h>
5  #define MIN (x,y) x<y?x:y;
6  int main()
7 {
8 __int64 n,count,i;
9 while(scanf("%I64d",&n)!=EOF)
10 {count=1;
11 for(i=0;i<n;i++)
12 count*=3;
13 count--;
14 printf("%I64d\n",count);
15 }
16 return 0;
17 }
18  

 

posted on 2010-10-09 22:50  role  阅读(276)  评论(0编辑  收藏  举报