이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
int diff[3][3][3];
int memo[100005][3][3][3][3][3][3];
int food[100005];
int N;
int CD(int a, int b, int c){map<int,int> M;M[a]++;M[b]++;M[c]++;return M.size();}
int dp(int id, int A1, int B1, int A2, int B2, int S1, int S2){
if(id >= N)return 0;
if(memo[id][A1][B1][A2][B2][S1][S2] != -1)return memo[id][A1][B1][A2][B2][S1][S2];
//give to 1
int G1;
if(S1 == 2){
G1 = diff[A1][B1][food[id]] + dp(id+1, food[id], A1, A2, B2, S1, S2);
}else if(S1 == 1){
G1 = (A1 == food[id] ? 1 : 0) + 1 + dp(id+1, food[id], A1, A2, B2, S1+1, S2);
}else G1 = 1 + dp(id+1, food[id], A1, A2, B2, S1+1, S2);
//give to 2
int G2;
if(S2 == 2){
G2 = diff[A2][B2][food[id]] + dp(id+1, A1, B1, food[id], A2, S1, S2);
}else if(S2 == 1){
G2 = (A2 == food[id] ? 1 : 0) + 1 + dp(id+1, A1, B1, food[id], A2, S1, S2+1);
}else G2 = 1 + dp(id+1, A1, B1, food[id], A2, S1, S2+1);
return memo[id][A1][B1][A2][B2][S1][S2] = max(G1, G2);
}
int main() {
memset(memo, -1, sizeof(memo));
cin >> N;
char tmp;
for(int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++)
for(int k = 0; k < 3; k++)
diff[i][j][k] = CD(i, j, k);
for(int i = 0; i < N; i++){
cin >> tmp;
if(tmp == 'M')food[i] = 0;
else if(tmp == 'B')food[i] = 1;
else food[i] = 2;
}
cout << dp(0, 0, 0, 0, 0, 0, 0) << "\n";
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |