汉诺塔,给出初始状态,问,要多少步才能把他一道第二个位置。。。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
long long dp[100][4];
int main()
{
freopen("in.txt","r",stdin);
char a[100];
int b[100];
while(~scanf("%s",a+1)&&a[1]!='X')
{
memset(dp,0,sizeof(dp));
int len = strlen(a+1);
for(int i=1;i<=len;i++) b[i] = a[i]-'A'+1;
for(int i =1;i<=len;i++)
{
for(int j=1;j<4;j++)
if(b[i]==j)
{
dp[i][j] = dp[i-1][j];
}
else
{
dp[i][j] = ((1ll<<(i-1))-1)+1+dp[i-1][6-j-b[i]];
}
// for(int j=1;j<4;j++)
// {
// cout<<dp[i][j]<<" ";
// }cout<<endl;
}
cout<<dp[len][2]<<endl;
}
return 0;
}