hdu2563

这一题我开始一直在想直接的递推关系 但失败了 最后看了别人的思路才知道这样也可以:

up[i]表示最后一步是向上而来的次数,lr[i]表示最后一步是向左或向右而来,则总方法数为sum[i] = up[i] + lr[i]。

而 up[i] = up[i-1] + lr[i-1],lr[i-1] = lr[i-1] + 2 * up[i-1]。

于是就有sum[i] = sum[i-1] * 2 + sum[i-2]  ( 我的代码没有用这个公式,而且这个公式我自己也没有推,直接从别人那借用的 )

代码如下:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int main()
 5 {
 6     int up[21], lr[21], i, C;
 7 
 8     up[1] = 1;
 9     lr[1] = 2;
10     for( i = 2; i < 21; i ++ ){
11         up[i] = up[i-1] + lr[i-1];
12         lr[i] = up[i-1] * 2 + lr[i-1];
13     }
14 
15     scanf( "%d", &C);
16     while( C -- ){
17         scanf( "%d", &i );
18         printf( "%d\n", up[i] + lr[i] );
19     }
20     return 0;
21 }

 

posted @ 2013-03-30 00:37  hacker_hzh  阅读(105)  评论(0编辑  收藏  举报