Submission #1245775

#TimeUsernameProblemLanguageResultExecution timeMemory
1245775warrennMiners (IOI07_miners)C++20
100 / 100
223 ms210412 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...