http://acm.hdu.edu.cn/showproblem.php?pid=1207
这题不知道该说啥,看网上别人都说这题是水题,但是我觉得挺难的啊。
思路是这样的,先把j个盘子挪到第四个杆上,然后再把剩下的用按照经典汉诺达的模型移到
目标杆上。
还有一点是要注意的。。汉诺塔问题中,把盘子移到任意一个杆子上所以得步数是一定的,虽然我还
不知道是为什么!如果哪位大神知道的话麻烦您给我留言,谢谢啦!
代码如下:
#include"stdio.h"
int main( )
{
__int64 num[65]={0,1,3},min;
int i,j,n;
num[64]=18433;
for(i=3;i<=63;i++)
{
min=2*num[1]+(1LL<<(i-1))-1;
for(j=1;j<i;j++)
{
if(min>2*num[j]+(1LL<<(i-j))-1)
min=2*num[j]+(1LL<<(i-j))-1;
}
num[i]=min;
}
while(~scanf("%d",&n))
printf("%I64d\n",num[n]);
return 0;
}