#include <iostream>
using namespace std;
int dp[3][30][30], Ans;
int get(int num, int c){
int a = num / 4, b = num % 4;
if (a == 3 and b == 3)
return 1;
if (a == 3)
return 1 + (b != c);
if (a == b and b == c)
return 1;
if (a == b or b == c or a == c)
return 2;
return 3;
}
int main(){
int n;
string s;
cin>>n>>s;
for (int i=0;i<2;i++){
for (int j=0;j<16;j++)
for (int k=0;k<16;k++)
dp[i][j][k] = -1e9;
}
dp[0][15][15] = 0;
for (int i=1;i<=n;i++){
int c = (s[i-1] == 'M') + (s[i-1] == 'B') * 2;
cout<<i<<endl;
for (int j=0;j<16;j++){
for (int k=0;k<16;k++){
if (dp[0][j][k] >= 0){
dp[1][j % 4 * 4 + c][k] = max(dp[1][j % 4 * 4 + c][k], dp[0][j][k] + get(j, c));
dp[1][j][k % 4 * 4 + c] = max(dp[1][j][k % 4 * 4 + c], dp[0][j][k] + get(k, c));
}
}
}
for (int j=0;j<16;j++){
for (int k=0;k<16;k++){
Ans = max(Ans, dp[1][j][k]);
dp[0][j][k] = dp[1][j][k], dp[1][j][k] = -1e9;
}
}
}
cout<<Ans<<'\n';
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |