HDOJ2569 ( 彼岸 ) 【递推公式】

 

f1=3
f2=9
f3=21
f4=51
猜测f(n)=2*f(n-1)+f(n-2)
在纸上打草稿写出f3的情况,然后推出f4的情况(在f3后边加*2或*3就成)
f3    f4    f3  f4    f3  f4
111*3    222*3   333*3
112*2    221*2   331*2
113*2    223*2   332*2
121*2    212*2   313*2
131*2    232*2   323*2
211*3    122*3   133*3
311*3    322*3   233*3
有两种思路(实质是一样的):
思路1:f4=2*f3+?(仔细观察:?代表的就是*3的个数,而他们的共同特点就是末两位数字相同。去掉他们的最后一位,观察)
11 12 13
21 22 23
31 32 33
这不正是f2的情况吗?好,为什么呢?考虑下,f3末尾两位数字相同的情况是怎么来的?不就是把f2的末尾数字重复一遍吗。
那么,为什么不是3*f2呢?因为前边的2*f3中已经包含了2/3的3*f2了。所以只需再加1个f2就足够了。
即f(n)=2f(n-1)+f(n-2):
思路2:f4=3*f3 -?(仔细观察:?代表的就是*2的个数,而他们的共同特点就是末两位数字不同)
Problem : 2569 ( 彼岸 )     Judge Status : Accepted
RunId : 5936964    Language : C    Author :
qq1203456195
Code Render Status : Rendered By HDOJ C Code Render Version 0.01 Beta
#include <stdio.h>
int main()
{
    int cas,n,i;
    int seq[50];
    seq[1]=3;
    seq[2]=9;
    seq[3]=21;
    for (i=4;i<41;i++)
        seq[i]=(seq[i-1]<<1)+seq[i-2];
    scanf("%d",&cas);
    while(cas--)
    {
        scanf("%d",&n);
        printf("%d\n",seq[n]);
    }
    return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值