hdu 2569彼岸(递归)

版权声明:如需转载,私聊博主 https://blog.csdn.net/lylzsx20172018/article/details/91048365

题目链接: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;
}

猜你喜欢

转载自blog.csdn.net/lylzsx20172018/article/details/91048365
hdu