Strange Towers of Hanoi
本题是一个四柱汉诺塔。
与三柱汉诺塔也有关系。
我们不难求出三柱汉诺塔的数学规律为:2 ^ n - 1;
对于四柱汉诺塔
有数组F4[x] 表示4柱时左柱有x个盘时的最小步骤
如何来求呢?
移动x个的最小步骤={先移动1个+然后移动x-1+再移动1个;先移动2个+再移动x-2+再移动2个,。。。。。先移动x-1+移动1个+移动x-1}取最小值
其中第一次和第三次移动是四柱,第二次移动可看作三柱。
for(int i=1; i<x;i++)
F4[x]=min{F4[i]*2+F3[x-i]};
代码如下
//Strange Towers of Hanoi
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int a3[13];
int a4[13];
int main()
{
for(int i=1;i<=12;i++)
a3[i]=pow(2,i)-1;
a4[1]=1;
a4[2]=3;
cout<<1<<endl<<3<<endl;
for(int i=3;i<=12;i++)
{
int ans=0x7fff;
for(int j=1;j<i;j++)
ans=min(ans,a4[j]*2+a3[i-j]);
a4[i]=ans;
cout<<ans<<endl;
}
return 0;
}
作者:qbning
-------------------------------------------
个性签名:曾经的我们空有一颗望海的心,却从没为前往大海做过真正的努力
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!