杭电ACM2064

动态规划

找规律  (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;
}


猜你喜欢

转载自blog.csdn.net/qq_40728285/article/details/80171190