#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
string s;
int dp[100002][4][4][4][4];
int coal(int a,int b,int c){
int cnt[4];
cnt[0]=cnt[1]=cnt[2]=cnt[3]=0;
cnt[a]++;
cnt[b]++;
cnt[c]++;
if(cnt[1]==1 && cnt[2]==1 && cnt[3]==1)return 3;
if(cnt[1]>=1){
if(cnt[2]>=1 || cnt[3]>=1)return 2;
return 1;
}
if(cnt[2]>=1){
if(cnt[1]>=1 || cnt[3]>=1)return 2;
return 1;
}
if(cnt[3]>=1){
if(cnt[2]>=1 || cnt[1]>=1)return 2;
return 1;
}
return 1;
}
int conv(char a){
if(a=='M')return 1;
if(a=='B')return 2;
if(a=='F')return 3;
return 0;
}
int f(int idx,int a,int b,int c,int d){
if(idx==n+1)return 0;
if(dp[idx][a][b][c][d]!=-1)return dp[idx][a][b][c][d];
int res=0;
res=max(res,f(idx+1,b,conv(s[idx-1]),c,d)+coal(a,b,conv(s[idx-1])));
res=max(res,f(idx+1,a,b,d,conv(s[idx-1]))+coal(c,d,conv(s[idx-1])));
return dp[idx][a][b][c][d]=res;
}
signed main(){
cin>>n>>s;
memset(dp,-1,sizeof dp);
cout<<f(1,0,0,0,0)<<endl;
}
# | 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... |