解析:
对于只有A,B,C三座的汉诺塔。
我们移动的步骤是
1.从A中移动n-1个至B上
2.把A中最后一个移到C上
3.把B上的n-1个移到C上
递推方程 f[i]=2*f[i-1]+1;
对于四座的汉诺塔
我们考虑首先移动j个塔,一共由四种选择。我们接着把剩下的n-j个塔移动,会有三种可以选择这又回到了上面的问题
递推方程: dp[i]=min(dp[i],dp[j]+f[i-j]+dp[j]);
#include<bits/stdc++.h>
using namespace std;
int f[100];
int dp[100];
int main()
{
f[1]=1;
for(int i=2;i<=12;i++) f[i]=2*f[i-1]+1;
memset(dp,0x3f,sizeof dp);
dp[0]=0;
for(int i=1;i<=12;i++)
for(int j=0;j<i;j++)
{
dp[i]=min(dp[i],dp[j]+f[i-j]+dp[j]);
}
for(int i=1;i<=12;i++) cout<<dp[i]<<endl;
}