hdu 1207

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;
}

 

posted @ 2012-05-13 15:57  朝圣の路  阅读(615)  评论(2编辑  收藏  举报