#include <bits/stdc++.h>
using namespace std;
int N;
int A[100005];
int DP[2][4][4][4][4]; // DP(n, 2nd last mine 1, last mine 1, 2nd last mine 2, last mine 2)
int main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> N;
string S;
cin >> S;
for (int i = 0; i < N; i++) {
if (S[i] == 'M') {
A[i] = 1;
} else if (S[i] == 'B') {
A[i] = 2;
} else {
A[i] = 3;
}
}
for (int n = N - 1; n >= 0; n--) {
for (int s1 = 0; s1 < 4; s1++) {
for (int l1 = 0; l1 < 4; l1++) {
for (int s2 = 0; s2 < 4; s2++) {
for (int l2 = 0; l2 < 4; l2++) {
int& res = DP[n % 2][s1][l1][s2][l2];
res = 0;
int ss1 = s1, ll1 = l1, ss2 = s2, ll2 = l2;
if (s1 == 0) {
ss1 = A[n];
}
if (s2 == 0) {
ss2 = A[n];
}
if (l1 == 0) {
ll1 = A[n];
}
if (l2 == 0) {
ll2 = A[n];
}
if (ss1 == A[n] && ll1 == A[n]) {
res = max(res, 1 + DP[(n + 1) % 2][l1][A[n]][s2][l2]);
} else if (ss1 == A[n] || ll1 == A[n] || ss1 == ll1) {
res = max(res, 2 + DP[(n + 1) % 2][l1][A[n]][s2][l2]);
} else {
res = max(res, 3 + DP[(n + 1) % 2][l1][A[n]][s2][l2]);
}
if (ss2 == A[n] && ll2 == A[n]) {
res = max(res, 1 + DP[(n + 1) % 2][s1][l1][l2][A[n]]);
} else if (ss2 == A[n] || ll2 == A[n] || ss2 == ll2) {
res = max(res, 2 + DP[(n + 1) % 2][s1][l1][l2][A[n]]);
} else {
res = max(res, 3 + DP[(n + 1) % 2][s1][l1][l2][A[n]]);
}
}
}
}
}
}
cout << DP[0][0][0][0][0] << "\n";
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
380 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
376 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
9 ms |
376 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
15 ms |
376 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
50 ms |
572 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
99 ms |
912 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
133 ms |
1016 KB |
Output is correct |