Submission #1291858

#TimeUsernameProblemLanguageResultExecution timeMemory
1291858Jawad_Akbar_JJMiners (IOI07_miners)C++20
0 / 100
118 ms1344 KiB
#include <iostream>

using namespace std;
int dp[3][30][30], Ans;

int get(int num, int c){
	int a = num / 4, b = num % 4;
	if (a == 3 and b == 3)
		return 1;
	if (a == 3)
		return 1 + (b != c);
	if (a == b and b == c)
		return 1;
	if (a == b or b == c or a == c)
		return 2;
	return 3;
}
int main(){
	int n;
	string s;
	cin>>n>>s;

	for (int i=0;i<2;i++){
		for (int j=0;j<16;j++)
			for (int k=0;k<16;k++)
				dp[i][j][k] = -1e9;
	}

	dp[0][15][15] = 0;

	for (int i=1;i<=n;i++){
		int c = (s[i-1] == 'M') + (s[i-1] == 'B') * 2;

		cout<<i<<endl;

		for (int j=0;j<16;j++){
			for (int k=0;k<16;k++){
				if (dp[0][j][k] >= 0){
					dp[1][j % 4 * 4 + c][k] = max(dp[1][j % 4 * 4 + c][k], dp[0][j][k] + get(j, c));
					dp[1][j][k % 4 * 4 + c] = max(dp[1][j][k % 4 * 4 + c], dp[0][j][k] + get(k, c));
				}
			}
		}

		for (int j=0;j<16;j++){
			for (int k=0;k<16;k++){
				Ans = max(Ans, dp[1][j][k]);
				dp[0][j][k] = dp[1][j][k], dp[1][j][k] = -1e9;
			}
		}
	}

	cout<<Ans<<'\n';

}
#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...