建设部网站官网挂证通报郑州网站推广培训
如果从后往前转移DP比较复杂,但是从前往后递推就比较简单好写,注意状态方程的定义,以及递归关系
class Solution {static constexpr int MOD = 1'000'000'007;
public:int checkRecord(int n) {// f[i][j][k] 表示前i天,缺勤j次,末尾连续迟到k次// f[i + 1][j][0] += f[i][j][k] if next is P// f[i+1][j+1][0] += f[i][j][k] if next is A && j < 1// f[i+1][j][k+1] += f[i][j][k] if next is L && L < 2vector<vector<vector<int>>> f(n + 1, vector<vector<int>>(2, vector<int>(3))); f[0][0][0] = 1;for (int i = 0; i < n; i++) {for (int j = 0; j < 2; j++) {for (int k = 0; k < 3; k++) {if (j < 1) {f[i + 1][j + 1][0] = (f[i + 1][j + 1][0] + f[i][j][k]) % MOD;}if (k < 2) {f[i + 1][j][k + 1] = (f[i + 1][j][k + 1] + f[i][j][k]) % MOD;}f[i + 1][j][0] = (f[i + 1][j][0] + f[i][j][k]) % MOD;}}}int res = 0;for (int j = 0; j < 2; j++) {for (int k = 0; k < 3; k++) {res = (res + f[n][j][k]) % MOD;}}return res;}
};