简单的爱心效果

四面体

四面体(tetra)

一只蚂蚁从点A出发,每次行动可沿四面体的边来到另外一个点。问n次行动后,蚂蚁回到点A有多少种方法。

 

输入格式

 

一行,一个整数n。1 ≤ n ≤ 10^6

 

 

输出格式

 

你的答案除以1 000 000 007的余数。

 

 

输入/输出例子1

输入:

2

 

输出:

3

 

样例解释

我的AC代码

#include<iostream>
using namespace std;
long long n,dp[4]={0,1,1,1},mod=1000000007;
int main() {
    cin>>n;
    for(int i=1;i<n;i++){
        long long a[4]={};
        for(int j=0;j<4;j++) a[j]+=(dp[(j+1)%4]+dp[(j+2)%4]+dp[(j+3)%4])%mod;
        for(int j=0;j<4;j++) dp[j]=a[j];
    }
    cout<<dp[0];
    return 0;
}

 New Bing 生成AC代码

// 一只蚂蚁从点A出发,每次行动可沿四面体的边来到另外一个点。问n次行动后,蚂蚁回到点A有多少种方法。
// c++代码实现

#include <iostream>
using namespace std;

// 用动态规划的方法,设dp[i][j]表示i次行动后,蚂蚁在点j的方法数
// 则dp[i][j] = dp[i-1][(j+1)%4] + dp[i-1][(j+2)%4] + dp[i-1][(j+3)%4]
// 初始条件为dp[0][0] = 1,其他为0
// 最终答案为dp[n][0]

int main() {
    long long n; // 输入行动次数
    cin >> n;
    long long dp[n+1][4]; // 定义状态数组
    // 初始化状态数组
    dp[0][0] = 1;
    for (int i = 1; i < 4; i++) {
        dp[0][i] = 0;
    }
    // 状态转移
    for (int i = 1; i <= n; i++) {
        for (int j = 0; j < 4; j++) {
            dp[i][j] = 0;
            for (int k = 1; k < 4; k++) {
                dp[i][j] += dp[i-1][(j+k)%4]%1000000007;
            }
        }
    }
    // 输出结果
    cout << dp[n][0] %1000000007<< endl;
    return 0;
}

 

posted @ 2023-05-09 13:20  Light-Chaser  阅读(83)  评论(0编辑  收藏  举报
简单的爱心效果