Submission #122235

#TimeUsernameProblemLanguageResultExecution timeMemory
122235Osama_AlkhodairyMiners (IOI07_miners)C++17
100 / 100
1256 ms108732 KiB
#include <bits/stdc++.h> using namespace std; #define finish(x) return cout << x << endl, 0 #define ll long long const int N = 100001; int n, dp[N][4][4][4][4]; string s; int id(char c){ if(c == 'M') return 0; if(c == 'B') return 1; if(c == 'F') return 2; assert(false); } int diff(int x, int y, int z){ set <int> ret = {x, y, z}; while(*ret.rbegin() == 3){ ret.erase(--ret.end()); } return ret.size(); } int solve(int ind, int p11, int p12, int p21, int p22){ if(ind == n) return 0; int &ret = dp[ind][p11][p12][p21][p22]; if(ret != -1) return ret; int one = diff(id(s[ind]), p11, p12) + solve(ind + 1, id(s[ind]), p11, p21, p22); int two = diff(id(s[ind]), p21, p22) + solve(ind + 1, p11, p12, id(s[ind]), p21); return ret = max(one, two); } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); memset(dp, -1, sizeof dp); cin >> n >> s; cout << solve(0, 3, 3, 3, 3) << endl; }
#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...