您的位置:首页 > 其它

HDU2077:汉诺塔IV

2016-07-27 17:06 190 查看
HDU2077

Problem Description

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

Input

输入数据的第一行是一个数据T,表示有T组数据。

每组数据有一个正整数n(1 <= n <= 20),表示有n个盘子。

Output

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

Sample InputSample Output
2
1
10
2
19684

题解

可看作上面n-1个盘子先移动到b,第n个盘子用两步移动到c,n-1个盘子再从b移动到c

则F
= f[n-1] + 2 (f为汉诺塔III中的f)

#include<cstdio>
#include<iostream>
#define ll long long
using 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: