hdu 2569彼岸(递归)

题目链接:https://cn.vjudge.net/contest/305330#problem/A

思路::
设:第n-2块有a种方法,第n-1块有b种方法(a<=b)
分情况:
(1)第n-2块和第n-1块的颜色相同 则—>a=b 则第n块有3a种方法
(2)第n-2块和第n-1块的颜色不同 则—>第n-2块有a种方法,第n-1块有b-a种方法 则第n块有2
(b-a)种方法

根据(1)和(2)得出递推式:f(n)=2*f(n-1)+f(n-2);(不是单单根据一个就能得出)

代码1:

#include<cstdio>
#include<cstring>
int dfs(int n){
    if(n==1)
        return 3;
    else if(n==2)
        return 9;
    else
        return 2*dfs(n-1)+dfs(n-2);
}
int main(){
    int T,n;
    scanf("%d",&T);
    while(T--){
        scanf("%d",&n);
        printf("%d\n",dfs(n));
    }
    return 0;
}

代码2:

#include<cstdio>
#include<cstring>
int main(){
    int T,a[45],n;
    scanf("%d",&T);
    while(T--){
        memset(a,0,sizeof(a));
        a[1]=3,a[2]=9;
        for(int i=3; i<45; i++)
            a[i]=2*a[i-1]+a[i-2];
        scanf("%d",&n);
        printf("%d\n",a[n]);
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zaiyang遇见

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值