hdu 2064汉诺塔III 递推
汉诺塔递推题,比汉诺塔多了一个限制条件,盘子只允许在相邻的柱子之间移动。
分析:
第1步:初始状态;
第2步:把上面的n-1个盘移到第3号杆上;
第3步:把第n个盘从1移到2;
第4步:把前n-1个从3移到1,给第个盘让路;
第5步:把第n个盘从2移到3;
第6步:把前n-1个从移到3,完成移动;
我们设f(n)为把n个盘从1移到3所需要的步数,当然也等于从3移到1的步数。
看什么的图就知道,要想把第n个盘从1移到3,需要想把前n-1个从1移动3,再从3->1最后再1->3。
而第n个盘要从1->2->3经历2步。
∴f(n)
= 3 × f(n-1) + 2;
f(1) = 2;
#include<stdio.h> int main() { __int64 f[36],n,i; f[1]=2; for(i=2;i<=35;i++) f[i]=3*f[i-1]+2; while(scanf("%I64d",&n)!=EOF) printf("%I64d\n",f[n]); return 0; }