四柱汉诺塔

来源:互联网 发布:ts合并软件 安卓版 编辑:程序博客网 时间:2024/06/05 09:10

2014年广州市信息学尖子选拔赛 第一题

Time Limit:30000MS  Memory Limit:256000K
Total Submit:7 Accepted:4 
Case Time Limit:1000MS

Description

你对经典的hanoi塔问题一定已经很熟悉了。有三根柱子,n个大小不一的圆盘,要求大盘不能压在小盘上,初始时n个圆盘都在第一根柱子上,最少要多少步才能挪到最后一根柱子上? 
现在我们来将hanoi塔扩展一下,由三根柱子扩展到四根柱子,其余规则不变。例如,3个圆盘,四根柱子A到D,初始时圆盘都A柱上,我们用五步就可以将圆盘都挪到D柱上: 
第一步:将圆盘1从A挪到B; 
第二步:将圆盘2从A挪到C; 
第三步:将圆盘3从A挪到D; 
第四步:将圆盘2从C挪到D; 
第五步:将圆盘1从B挪到D。 
你的任务是写一个程序求解四柱子hanoi塔问题最少要多少步可以解决。

Input

输入只有一行,为一个正整数n。(1<=n<=1000)

Output

输出为一个正整数,代表n盘四柱子hanoi塔问题最少要多少步可以解决。

Sample Input

3

Sample Output

5


题解:我们通过求出f[i]的值,发现了一个新的规律: 
f[1] : 0 +2^0=1; 
f[2] : 1 +2^1=3; 
f[3] : 3 +2^1=5; 
f[4] : 5 +2^2=9; 
f[5] : 9 +2^2=13; 
f[6] : 13+2^2=17; 
f[7] : 17+2^3=25; 
f[8] : 25+2^3=33; 
f[9] : 33+2^3=41; 
f10] : 41+2^3=49; 
f[11]: 49+2^4=65; 
易得出规律直接模拟即可(本题要高精)

var  n,ans,co,num,add,i:longint;begin  readln(n);  co:=2;num:=2;add:=2;  ans:=1;   for i:=2 to n do  begin    ans:=ans+add;    if co>1 then dec(co) else    begin      add:=add*2;      inc(num);      co:=num;    end;  end;  writeln(ans);end.



0 0