E. Tetrahedron

题目链接:https://codeforces.com/problemset/problem/166/E
解题思路:第n步要回到D点,所以在第n-1步除了当前点和D点,还有两个点可以走,在第n-2步,出了当前点还有三个点可以走,所以就可以推出递推公式dp[i]=2*dp[i-1]+3*dp[i-2]
#include<bits/stdc++.h> using namespace std; const int maxn=1e7+10; int n; long long dp[maxn]; void solve(){ dp[1]=0; dp[2]=3; for(int i=3;i<=n;i++){ dp[i]=(dp[i-1]*2+dp[i-2]*3)%1000000007; } cout<<dp[n]; return ; } void INPUT(){ scanf("%d",&n); solve(); } int main() { INPUT(); //solve(); return 0; }


内存超限代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e7+10;
int n; 
long long dp[maxn][4];
void solve(){
    for(int i=1;i<=3;i++)dp[1][i]=1;
    for(int i=2;i<=n-1;i++){
        for(int j=1;j<=4;j++){
            for(int k=1;k<=4;k++){
                if(k!=j){
                    dp[i][j]+=dp[i-1][k];
                }
            }
        }
    }
    long long res=0;
    for(int i=1;i<=3;i++){
        res=(res+dp[n-1][i])%1000000007;
    }
    cout<<res;
    return ;
}

void INPUT(){
    scanf("%d",&n);
    solve();
}

int main()
{
    INPUT();
    //solve();
    return 0;
}

 

 

 

posted @ 2021-12-23 09:46  ZangYiDe  阅读(50)  评论(0)    收藏  举报