#include<stdio.h>
#include<math.h>
#define m 99999999//其实定义在里面也可以,,定义在这因为数太大
int main()
{
int n,i,min,j;
int a[65];
a[1]=1;a[2]=3;
for(i=3;i<=65;i++)//第一次提交代码错误,因为i的最终值没有与定义的一致
{
min=m;
for(j=1;j<i;j++)
if(2*a[j]+pow(2.0,i-j)-1<min)
min=2*a[j]+(int)pow(2.0,i-j)-1;//先打表,省去一大推时间,不然会超时
a[i]=min;
}
while(scanf("%d",&n)!=EOF)
{
printf("%d\n",a[n]);
}
return 0;
}
/*四柱汉诺塔的计算最少移动次数
a[1]=1;a[2]=3;
for(i=3;i<=65;i++)
{
min=m;
for(j=1;j<i;j++)
if(2*a[j]+pow(2.0,i-j)-1<min)
min=2*a[j]+(int)pow(2.0,i-j)-1;
a[i]=min;
}*/