제출 #413743

#제출 시각아이디문제언어결과실행 시간메모리
413743ruadhanMiners (IOI07_miners)C++17
100 / 100
241 ms200980 KiB
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;

const int MX = 1e5 + 5;
ll dp[MX][4][4][4][4];
int N;

int score(int a, int b, int c)
{
    int ret = 0;
    if (a == 1 || b == 1 || c == 1)
        ret++;
    if (a == 2 || b == 2 || c == 2)
        ret++;
    if (a == 3 || b == 3 || c == 3)
        ret++;
    return ret;
}

int main()
{
    cin >> N;
    for (int i = 0; i <= N; i++)
        for (int a = 0; a < 4; a++)
            for (int b = 0; b < 4; b++)
                for (int c = 0; c < 4; c++)
                    for (int d = 0; d < 4; d++)
                        dp[i][a][b][c][d] = -1;

    dp[0][0][0][0][0] = 0;

    string S;
    cin >> S;

    for (int i = 0; i < N; i++)
    {
        int x = 0;
        if (S[i] == 'B')
            x = 1;
        if (S[i] == 'F')
            x = 2;
        if (S[i] == 'M')
            x = 3;
        for (int a = 0; a < 4; a++)
            for (int b = 0; b < 4; b++)
                for (int c = 0; c < 4; c++)
                    for (int d = 0; d < 4; d++)
                    {
                        if (dp[i][a][b][c][d] == -1)
                            continue;
                        dp[i + 1][a][b][d][x] = max(dp[i + 1][a][b][d][x], dp[i][a][b][c][d] + score(c, d, x));
                        dp[i + 1][b][x][c][d] = max(dp[i + 1][b][x][c][d], dp[i][a][b][c][d] + score(a, b, x));
                    }
    }

    ll ans = 0;
    for (int a = 0; a < 4; a++)
        for (int b = 0; b < 4; b++)
            for (int c = 0; c < 4; c++)
                for (int d = 0; d < 4; d++)
                    ans = max(ans, dp[N][a][b][c][d]);

    cout << ans << '\n';

    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...
#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...