动态规划
找规律
(1)当有一个盘子的时候为2次
(2)当有两个盘子的时候
把上面那个盘子从 A移到C 需要2次(A-B-C)
把最大的盘子从 A移到B 需要1次
把盘子从 C移到A 需要2次(C-B-A)
把最大的盘子从 B移到C 需要1次
把盘子间接 从 A移到C 需要2次(A-B-C)
动态规划成一个小问题,对于n个盘子的问题,就可以看成最下面的盘子和上面的n-1个盘子把n-1个盘子看成一个整体:
下面这5步是借鉴别人的话(地址:https://blog.csdn.net/arthur_holmes/article/details/52902161)
把n 个盘子从A间接移动到C 需要以下五步:
1. 把n - 1 个盘子间接从A 移到C f(n - 1)
2. 把最大的盘子从A 移到B 1
3. 把n - 1 个盘子间接从C 移到A f(n - 1)
4. 把最大的盘子从B 移到C 1
5. 把n - 1 个盘子间接从A 移到C f(n - 1)
易得f(n) = 3 * f(n - 1) + 2, f(1) = 2;
代码:
#include<stdio.h> int main(){ __int64 H[38]; int n; H[1]=2; for(int i=2;i<=35;i++){ H[i]=3 * H[i-1] + 2 ; } while(~scanf("%d",&n)){ printf("%I64d\n",H[n]); } return 0; }