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 }

 

转载于:https://www.cnblogs.com/hacker-hzh/archive/2013/03/30/2989916.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值