제출 #1011379

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