HDU 1207 汉诺塔II 动态规划

题目大意:还是汉诺塔的变种,改变的规则是有四根柱子,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)

....................

 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         
View Code

 

posted @ 2013-06-05 21:51  xiaxiaosheng  阅读(197)  评论(0编辑  收藏  举报