제출 #1136798

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

map<char, int> m;
int n;
string s;
vector<vector<vector<vector<vector<int>>>>> dp;

int calc(int a, int b, int c) {
    set<int> s;
    s.insert(a);
    s.insert(b);
    s.insert(c);
    if (*s.begin() == 0) return s.size()-1;
    else return s.size();
}

int solve(int i, int a1, int a2, int b1, int b2) {
    if (i == n) return 0;
    if (dp[i][a1][a2][b1][b2] != -1) return dp[i][a1][a2][b1][b2];
    int ans = 0;
    // send this to mine a
    ans = max(ans, solve(i+1, a2, m[s[i]], b1, b2)+calc(a1, a2, m[s[i]]));
    // send it to mine b
    ans = max(ans, solve(i+1, a1, a2, b2, m[s[i]])+calc(b1, b2, m[s[i]]));
    return dp[i][a1][a2][b1][b2] = ans;
}

int main() {
    cin >> n >> s;
    dp.resize(n+1, vector<vector<vector<vector<int>>>>(4, vector<vector<vector<int>>>(4, vector<vector<int>>(4, vector<int>(4, -1)))));
    m['M'] = 1;
    m['F'] = 2;
    m['B'] = 3;
    cout << solve(0, 0, 0, 0, 0) << '\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...