hdu 2064

#include
int main()
{
	__int64 n,a;
	while(scanf("%I64d",&n)!=EOF)
	{
		a=1;
		while(n--)
			a=a*3;
		printf("%I64d\n",a-1);
	}
	return 0;
}
做法应该是前(n-1个) 从1->3,3->1,1->3   三次
                   n 从1->2,2->3,走两步。
所以,公式是f(n) = 3 × f(n-1) + 2;
整理后f(n)=3^n-1. 


题中改变了原有的汉诺塔规则,而是 每次必须经过中间的柱子,尽管有些许变化但是推到过程是一样的(现设有A,B,C三个柱子,以及标号为1-N的盘子),既然不能将编号为N的盘子移动到C上,那么就必须先移动N到B上,这样的话就先有N- 1个盘子在C上这个状态,然后在移动N到C上之前又要把N-1个盘子移动到A上,要达到最终目的的话,就要再把N-1个盘子移动到C上。
上述过程就得到一个递推式 F[N]= 3* F[N-1]+ 2, 得到F[N]= 3^ N- 1。

你可能感兴趣的:(动态规划)