四面体
四面体(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; }