#include <bits/stdc++.h>
using namespace std;
int const INF=1000000000;
int const MAX=100005;
int dp[MAX][4][4][4][4];
int n;
char sir[MAX];
void read(){
cin>>n;
cin.get();
cin.getline(sir+1,MAX);
int i;
for(i=1;i<=n;++i){
if(sir[i]=='B') sir[i]=1;
if(sir[i]=='F') sir[i]=2;
if(sir[i]=='M') sir[i]=3;
}
}
int distinct(int a,int b,int c){
set<int>s;
if(a)
s.insert(a);
if(b)
s.insert(b);
if(c)
s.insert(c);
return s.size();
}
void maxself(int& x,int val){
if(x<val)
x=val;
}
int get_dp(){
int i,tip,tip1,tip2,tip3,tip4;
for(tip1=0;tip1<4;++tip1)
for(tip2=0;tip2<4;++tip2)
for(tip3=0;tip3<4;++tip3)
for(tip4=0;tip4<4;++tip4)
dp[0][tip1][tip2][tip3][tip4]=-INF;
dp[0][0][0][0][0]=0;
for(i=1;i<=n;++i)
for(tip1=0;tip1<4;++tip1)
for(tip2=0;tip2<4;++tip2)
for(tip3=0;tip3<4;++tip3)
for(tip4=0;tip4<4;++tip4){
dp[i][tip1][tip2][tip3][tip4]=-INF;
for(tip=0;tip<4;++tip){
if(tip1==sir[i])
maxself(dp[i][tip1][tip2][tip3][tip4],dp[i-1][tip2][tip][tip3][tip4]+distinct(tip1,tip2,tip));
if(tip3==sir[i])
maxself(dp[i][tip1][tip2][tip3][tip4],dp[i-1][tip1][tip2][tip4][tip]+distinct(tip3,tip4,tip));
}
}
int ans=-INF;
for(tip1=0;tip1<4;++tip1)
for(tip2=0;tip2<4;++tip2)
for(tip3=0;tip3<4;++tip3)
for(tip4=0;tip4<4;++tip4)
maxself(ans,dp[n][tip1][tip2][tip3][tip4]);
return ans;
}
int main()
{
read();
cout<<get_dp();
return 0;
}
# | 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... |