#include <bits/stdc++.h>
using namespace std;
const int inf = 1e8;
int pw[5] = {1, 4, 16, 64, 256};
void chmax(int &x, const int &y){ x = max(x, y); }
signed main(){
int n; cin >> n;
string s; cin >> s;
for ( auto &x: s ){
if ( x == 'M' ) x = 0;
else if ( x == 'F' ) x = 1;
else x = 2;
}
auto get = [&](int x, int y, int z){
set <int> st;
for ( auto i: {x, y, z} ){
if ( i < 3 ) st.insert(i);
}
return st.size();
};
vector <int> dp(256, -inf);
dp[255] = 0;
for ( auto &v: s ){
vector <int> nxt(256, -inf);
for ( int i = 0; i < 256; i++ ){
if ( dp[i] < 0 ) continue;
{
int x = i / pw[0] % 4, y = i / pw[1] % 4;
chmax(nxt[i - x - y * pw[1] + y + v * pw[1]], dp[i] + get(x, y, v));
}
{
int x = i / pw[2] % 4, y = i / pw[3] % 4;
chmax(nxt[i - x * pw[2] - y * pw[3] + y * pw[2] + v * pw[3]], dp[i] + get(x, y, v));
}
}
swap(dp, nxt);
}
cout << *max_element(dp.begin(), dp.end()) << '\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... |