제출 #1185149

#제출 시각아이디문제언어결과실행 시간메모리
1185149petezaMiners (IOI07_miners)C++20
100 / 100
70 ms39748 KiB
#include <bits/stdc++.h>
using namespace std;

int n; string str;
int dp[100005][10][10];

int conv(char x) {
    return (x == 'M' ? 0 : x == 'B' ? 1 : 2);
}

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

int main() {
    cin.tie(0) -> sync_with_stdio(0);
    cin >> n >> str;
    int mx = 0;
    for(int k=0;k<=n;k++) for(int i=0;i<10;i++) for(int j=0;j<10;j++) dp[k][i][j] = -999999999;
    dp[0][0][0] = 0;
    for(int i=0;i<n;i++) {
        int cmx = 0;
        for(int d1=0;d1<10;d1++) {
            for(int d2=0;d2<10;d2++) {
                if(!d1) dp[i+1][conv(str[i])*4+1][d2] = max(dp[i+1][conv(str[i])*4+1][d2], dp[i][d1][d2] + 1);
                else dp[i+1][(d1-1)%3*3+conv(str[i])+1][d2] = max(dp[i+1][(d1-1)%3*3+conv(str[i])+1][d2], dp[i][d1][d2] + score((d1-1)/3, (d1-1)%3, conv(str[i])));
                if(!d2) dp[i+1][d1][conv(str[i])*4+1] = max(dp[i+1][d1][conv(str[i])*4+1], dp[i][d1][d2] + 1);
                else dp[i+1][d1][(d2-1)%3*3+conv(str[i])+1] = max(dp[i+1][d1][(d2-1)%3*3+conv(str[i])+1], dp[i][d1][d2] + score((d2-1)/3, (d2-1)%3, conv(str[i])));
            }
        }
    }
    for(int i=0;i<10;i++) for(int j=0;j<10;j++) mx = max(mx, dp[n][i][j]);
    cout << mx;
}
#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...