题目大意:还是汉诺塔的变种,改变的规则是有四根柱子,n个盘子,问一共要移动多少次?
解题报告:有规律,但是没搞懂怎么来的,规律是:
dp[1]=1;
dp[2]=dp[1]+2, dp[3]=dp[2]+2; (2个式子加2)
dp[4]=dp[3]+4, dp[5]=dp[4]+4, dp[6]=dp[5]+4; (3个式子加4)
....................
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<cstdio> 2 int dp[70],p[70]; 3 void dabiao() { 4 dp[1]=1; 5 int i=2,c=2,flag=2; 6 while(i<=64) { 7 for(int j=1;j<=flag;++j) 8 dp[i++]=dp[i-1]+c; 9 c*=2; 10 flag++; 11 } 12 } 13 int main() { 14 dabiao(); 15 int n; 16 while(scanf("%d",&n)!=EOF) 17 printf("%d\n",dp[n]); 18 return 0; 19 } 20