Codeforces Round #113 (Div. 2) E. Tetrahedron(dp/递推)
https://codeforces.com/problemset/problem/166/E
题目大意:
给定一个正三角锥,最上面的顶点是D点,下面三个点分别标号为ABC
给定n次,我们初始化在D点上,并且要求最后第n步也必须回到D点上,但是不能两秒同在同一个点上,问我们这样的路径有多少条?
输入
2
输出
3
输入
4
输出
21
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,LL> PII;
const LL MAXN=1e18;
const LL N=10000200,M=2002;
const LL mod=1e9+7;
LL dp[N];
//状态表示:dp[i]表示第i秒的方案数
int main()
{
cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
LL T=1;
//cin>>T;
while(T--)
{
LL n;
cin>>n;
dp[1]=0;
dp[2]=3;
dp[3]=6;
/*
对于第i-1秒,有两种选择,即除当前点和起点外的另外两个点,最后一步回到起点
对于第i-2秒,有三种选择,即除当前点的另外三个点
*/
for(int i=4;i<=n;i++)
{
dp[i]=(2*dp[i-1]+3*dp[i-2])%mod;
}
cout<<dp[n]<<endl;
}
return 0;
}