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;
}
posted @ 2022-11-01 18:39  Vijurria  阅读(17)  评论(0编辑  收藏  举报