题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1995
解题思路:求第k号盘子至少需要移动的次数,实际上是求n-k(认作是前g-1个盘子移动的总次数)个盘子(还欠一个)至少需要移动的次数再加上第(n-k+1)(认作是第g个盘子)个盘子移动一次即为移动的总次数
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 int main() 5 { 6 int T,N,k; 7 LL a[61]={0}; 8 a[1]=1; 9 for(int i=2;i<61;i++)//先打表 10 a[i]=2*a[i-1]+1;//汉诺塔递推规律 11 while(cin>>T){ 12 while(T--){ 13 cin>>N>>k; 14 cout<<a[N-k]+1<<endl; 15 } 16 } 17 return 0; 18 }