Strange Towers of Hanoi

问题链接: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;
}
posted @ 2021-09-16 08:44  qbning  阅读(25)  评论(0编辑  收藏  举报
描述