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 }