HDU2077:汉诺塔IV

来源:互联网 发布:windows 2012 ad 工具 编辑:程序博客网 时间:2024/06/02 07:22

HDU2077
Problem Description
还记得汉诺塔III吗?他的规则是这样的:不允许直接从最左(右)边移到最右(左)边(每次移动一定是移到中间杆或从中间移出),也不允许大盘放到小盘的上面。xhd在想如果我们允许最大的盘子放到最上面会怎么样呢?(只允许最大的放在最上面)当然最后需要的结果是盘子从小到大排在最右边。

Input
输入数据的第一行是一个数据T,表示有T组数据。
每组数据有一个正整数n(1 <= n <= 20),表示有n个盘子。

Output
对于每组输入数据,最少需要的摆放次数。

Sample Input Sample Output 2
1
10
2
19684

题解

可看作上面n-1个盘子先移动到b,第n个盘子用两步移动到c,n-1个盘子再从b移动到c
则F[n] = f[n-1] + 2 (f为汉诺塔III中的f)

#include<cstdio>#include<iostream>#define ll long longusing namespace std;int n;ll f[40];int main(){    f[1] = 2;    for(int i = 2; i <= 35; i++)        f[i] = f[i-1] * 3 + 2;    scanf("%d", &n);    while(~scanf("%d", &n))        cout<<f[n-1]+2<<endl;    return 0;}
0 0
原创粉丝点击