https://vjudge.net/contest/275895#problem/D
之前,有一个误区,误认为n-1块中最大块的一块也可以放在最上面,没想到不可以,只能够用常规的方法移动。
#include <iostream>
using namespace std;
int main()
{
long long F[21] = { 0,2 }; int b;
int n; cin >> n; int a;
while (n--)
{
cin >> a;
for (int i = 2; i < a; i++)
{
F[i] = 3 * F[i - 1] + 2;//汉诺塔3的移动算法,当只有1个是要移动2次就是F(1),i个时是将最i-1个移动完之后再移动最后一个2次。
}
b = F[a - 1] + 2;//最后底部最大块的移动2次就行了
cout << b << endl;
}
}