제출 #1011340

#제출 시각아이디문제언어결과실행 시간메모리
1011340kaopjMiners (IOI07_miners)C++17
68 / 100
1567 ms344976 KiB
#include <iostream> #include <vector> #include <map> #define lgm cin.tie(0)->sync_with_stdio(0); using namespace std; #define int long long signed main() { lgm; int n; cin >> n; string c; cin >> c; map<tuple<int,vector<char>,vector<char>>,int> dp; auto dfs = [&] (auto dfs,int p,vector<char> a,vector<char> b)->int { if (dp[{p,a,b}] != 0) { return dp[{p,a,b}]; } vector<char> ua=a,ub=b; int sa=0,sb=0; bool hm=0,hb=0,hf=0; ua[0]=ua[1]; ua[1]=ua[2]; ua[2]=c[p]; ub[0]=ub[1]; ub[1]=ub[2]; ub[2]=c[p]; for (int i=0;i<3;i++) { if (ua[i] == 'M') { sa+=1-hm; hm=1; } else if (ua[i] == 'B') { sa+=1-hb; hb=1; } else if (ua[i] == 'F') { sa+=1-hf; hf=1; } } hm=0; hb=0; hf=0; for (int i=0;i<3;i++) { if (ub[i] == 'M') { sb+=1-hm; hm=1; } else if (ub[i] == 'B') { sb+=1-hb; hb=1; } else if (ub[i] == 'F') { sb+=1-hf; hf=1; } } if (p == n-1) { return dp[{p,a,b}]=max(sa,sb); } return dp[{p,a,b}]=max(sa+dfs(dfs,p+1,ua,b),sb+dfs(dfs,p+1,a,ub)); }; cout << dfs(dfs,0,{' ',' ',' '},{' ',' ',' '}); 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...