题目来源
给定长度,以及可以选择的状态,问可以有多少种结果。
不会…看了答案,代码如下:
class Solution {
public:
int checkRecord(int n) {
const int MOD = 1000000007;
int f[n+1][2][3] = {0};
for (int i=0; i<2; i++)
for (int j=0; j<3; j++)
f[0][i][j] = 1;
for (int i=1; i<=n; i++)
for (int j=0; j<2; j++)
for (int k=0; k<3; k++) {
int val = f[i-1][j][2];
if (j > 0)
val = (val + f[i-1][j-1][2]) % MOD;
if (k > 0)
val = (val + f[i-1][j][k-1]) % MOD;
f[i][j][k] = val;
}
return f[n][1][2];
}
};
有一点和我的想法差不多,就是得用DP,然后分三种情况来处理,但是怎么处理这个过程我想不太清楚。k表示的是尾巴上最多有几个L。
网友评论