Submission #1194299

#TimeUsernameProblemLanguageResultExecution timeMemory
1194299PetrixPalindromic Partitions (CEOI17_palindromic)C++20
0 / 100
0 ms320 KiB
#include <iostream>
using namespace std;

int dp[100001][4][4][4][4];
int frv[256];

int ce_punem(int a,int b,int c){
    if(!a) a=c;
    if(!b) b=c;
    if(a!=b && a!=c && b!=c) return 3;
    if(a==b && b==c) return 1;
    return 2;
}

int main()
{
    frv['M']=1;frv['B']=2;frv['F']=3;
    int n,i,food11,food21,food12,food22,max1=0;string s;
    cin>>n>>s;
    s=' '+s;
    for(i=0;i<=n;i++){
        for(food11=0;food11<4;food11++){
            for(food21=0;food21<4;food21++){
                for(food12=0;food12<4;food12++){
                    for(food22=0;food22<4;food22++){
                        dp[i][food11][food21][food12][food22]=-1e9;
                    }
                }
            }
        }
    }
    dp[0][0][0][0][0]=0;
    for(i=1;i<=n;i++){
        for(food11=0;food11<4;food11++){///1
            for(food21=0;food21<4;food21++){///1
                for(food12=0;food12<4;food12++){///2
                    for(food22=0;food22<4;food22++){///2
                        ///punem la 1
                        dp[i][food21][frv[s[i]]][food12][food22]=max(dp[i][food21][frv[s[i]]][food12][food22],
                                                                     dp[i-1][food11][food21][food12][food22]+ce_punem(food11,food12,frv[s[i]]));
                        dp[i][food11][food21][food22][frv[s[i]]]=max(dp[i][food11][food21][food22][frv[s[i]]],
                                                                     dp[i-1][food11][food21][food12][food22]+ce_punem(food12,food22,frv[s[i]]));

                    }
                }
            }
        }
    }
    /*
    for(i=1;i<=n;i++){
        for(food11=0;food11<4;food11++){///1
            for(food21=0;food21<4;food21++){///1
                for(food12=0;food12<4;food12++){///2
                    for(food22=0;food22<4;food22++){///2
                        if(dp[i][food11][food21][food12][food22]>0)
                            cout<<i<<"|1: "<<food11<<" "<<food21<<"|2: "<<food12<<" "<<food22<<" "<<dp[i][food11][food21][food12][food22]<<"\n";
                    }
                }
            }
        }
    }*/
    for(food11=0;food11<4;food11++){///1
        for(food21=0;food21<4;food21++){///1
            for(food12=0;food12<4;food12++){///2
                for(food22=0;food22<4;food22++){///2
                    max1=max(max1,dp[n][food11][food21][food12][food22]);
                }
            }
        }
    }
    cout<<max1-1;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...