看错题意了,还以为是图.....结果是2*N
学习了一位大佬的思路,清晰易懂
贴图~
注意点:
1.动态转移方程中会用到i - 2,所以循环前,把f[0][]、f[1][]自行写出来,否则越界
2.f[][]最好开long long
代码:
#include<iostream>
using namespace std;
const int N = 10000010,MOD = 1000000007;
long long f[N][3];
int n;
int main()
{
cin >> n;
f[0][0] = 1,f[1][0] = 2,f[1][1] = 1,f[1][2] = 1;
for(int i = 2;i < n;i ++)
{
f[i][0] = (f[i-1][0]+f[i-1][1]+f[i-1][2]+f[i-2][0])%MOD;
f[i][1] = (f[i-1][2]+f[i-2][0])%MOD;
f[i][2] = (f[i-1][1]+f[i-2][0])%MOD;
}
cout << f[n-1][0] << endl;
return 0;
}