题意:给你一个四边形,让你从顶点 出发,经过k步返回顶点,问你一共有多少种做法
思路:dp【i】代表每一步,dp【i】【0】代表顶点,其他顶点都是相互转移的,类似于选择的dp
代码:
#include <bits/stdc++.h> using namespace std; const int maxn=1e7+5; const int MOD=1e9+7; int dp[maxn][5]; int main() { int n; scanf ("%d",&n); memset (dp,0,sizeof (dp) ); dp[0][0]=1; for (int i=1; i<=n; i++) { for (int j=0; j<4; j++) { for (int k=0; k<4; k++) { if (j==k) { continue; } dp[i][j]+=dp[i-1][k]; if (dp[i][j]>=MOD) { dp[i][j]%=MOD; } } } } cout<<dp[n][0]<<endl; return 0; }