楼上的大佬们已经把解析说得很详细了,我利用(a==b)的返回值把状态方程优化了一下。
#include<bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
int main()
{
int dp[55][3];
int m = 0;
memset(dp, 0, sizeof(dp));
string a;
cin>>a;
m = (a[0] - '0') % 3;
dp[0][m] = 1;
for(int i = 1; i < a.length(); i++){
m = (a[i] - '0') % 3;
for(int j = 0; j < 3; j++){
dp[i][j] = (dp[i - 1][j] + dp[i - 1][(j - m + 3) % 3] + (j == m)) % mod;
}
}
printf("%d",dp[a.length() - 1][0] % mod);
//system("pause");
return 0;
}
京公网安备 11010502036488号