奇怪汉诺塔
题目描述
汉诺塔问题,条件如下:
这里有 A、B、C 和 D 四座塔。
这里有 个圆盘, 的数量是恒定的。
每个圆盘的尺寸都不相同。
所有的圆盘在开始时都堆叠在塔 A 上,且圆盘尺寸从塔顶到塔底逐渐增大。
我们需要将所有的圆盘都从塔 A 转移到塔 D 上。
每次可以移动一个圆盘,当塔为空塔或者塔顶圆盘尺寸大于被移动圆盘时,可将圆盘移至这座塔上。 请你求出将所有圆盘从塔 A 移动到塔 D,所需的最小移动次数是多少。
输入样例
无输入
输出格式
对于每一个整数n(1<=n<=12),输出满足条件的最小移动次数,每个结果占一行。
代码
#include<iostream>
using namespace std;
long long a[30],b[30];
int main()
{
a[1]=1;
for(int i=2;i<=12;i++)
a[i]=2*a[i-1]+1;
b[1]=1;
for(int i=2;i<=12;i++)
{
b[i]=2147483647;
for(int j=1;j<=i;j++)
b[i]=min(b[i],2*b[j]+a[i-j]);
}
for(int i=1;i<=12;i++)
cout<<b[i]<<endl;
return 0;
}