제출 #707779

#제출 시각아이디문제언어결과실행 시간메모리
707779TAhmed33Miners (IOI07_miners)C++98
100 / 100
1068 ms147052 KiB
#include <bits/stdc++.h>
using namespace std;
int n;
vector <int> adds;
int dp[100001][4][4][4][4];
int ans (int pos, int a, int b, int c, int d) {
	int &ret = dp[pos][a][b][c][d];
	if (ret != -1) return ret;
	if (pos == n) {
		return ret = 0;
	}
	map <int, int> distinct;
	if (a != 0) distinct[a]++;
	if (b != 0) distinct[b]++;
	distinct[adds[pos]]++;
	int x = ans(pos + 1, b, adds[pos], c, d) + (int)distinct.size();
	map <int, int> distinct2;
	if (c != 0) distinct2[c]++;
	if (d != 0) distinct2[d]++;
	distinct2[adds[pos]]++;
	x = max(x, ans(pos + 1, a, b, d, adds[pos]) + (int)distinct2.size());
	return ret = x;
}
int main () {
	memset(dp, -1, sizeof(dp));
	string s;
	cin >> n >> s;
	for (auto i : s) {
		if (i == 'M') adds.push_back(1);
		else if (i == 'F') adds.push_back(2);
		else adds.push_back(3);
	}
	cout << ans(0, 0, 0, 0, 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...