Submission #1136798

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