class Solution {
public:
int checkRecord(int n) {
const long MOD=1e9+7;
long f[4][2];
//缺席,正常,迟一,迟二
//是否存在缺席
memset(f,0,sizeof f);
long fpre[4][2];
f[0][1]=1;
f[1][0]=1;
f[2][0]=1;
for(int i=2;i<=n;i++){
memcpy(fpre,f,sizeof f);
f[0][1]=(fpre[1][0]+fpre[2][0]+fpre[3][0])%MOD;
f[1][1]=(fpre[0][1]+fpre[2][1]+fpre[3][1]+fpre[1][1])%MOD;
f[1][0]=(fpre[2][0]+fpre[3][0]+fpre[1][0])%MOD;
f[2][1]=(fpre[0][1]+fpre[1][1])%MOD;
f[2][0]=(fpre[1][0]);
f[3][1]=(fpre[2][1]);
f[3][0]=fpre[2][0];
}
long ans=0;
for(int i=0;i<4;i++){
for(int j=0; j<2;j++){
ans=(ans+f[i][j])%MOD;
}
}
return ans;
}
};
可以用矩阵优化