Input包含多组数据,每个数据一行,是盘子的数目N(1<=N<=64)。
Output对于每组数据,输出一个数,到达目标需要的最少的移动数。
Sample Input
1 3 12
Sample Output
1 5 81
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 using namespace std; 6 const int INF=99999999; 7 int f[65]; 8 void Init(){ 9 f[1]=1; f[2]=3; 10 for(int i=3;i<65;i++){ 11 int minx=INF; 12 for(int x=1;x<i;x++) 13 if(2*f[x]+pow(2,i-x)-1<minx) 14 minx=2*f[x]+pow(2,i-x)-1; 15 f[i]=minx; 16 } 17 } 18 int main(){ 19 int n; 20 Init(); 21 while(~scanf("%d",&n)){ 22 printf("%d\n",f[n]); 23 } 24 return 0; 25 }
原文:http://www.cnblogs.com/shixinzei/p/7295089.html