Submission #287792

#TimeUsernameProblemLanguageResultExecution timeMemory
287792reymontada61Growing Vegetable is Fun 3 (JOI19_ho_t3)C++14
15 / 100
286 ms511480 KiB
#include <bits/stdc++.h>
using namespace std;

int n;
string s;
int r, g, b;
const int MXN = 405;
int dp[MXN][MXN][MXN][4];

vector<int> rs, gs, bs;

signed main() {


	cin >> n >> s;
	
	int rc = 0, bc = 0, gc = 0;
	
	for (int i=0; i<n; i++) {
		if (s[i] == 'R') {
			rs.push_back(i+1);
			r++;
			rc++;
		}
		if (s[i] == 'G') {
			gs.push_back(i+1);
			g++;
			gc++;
		}
		if (s[i] == 'Y') {
			bs.push_back(i+1);
			b++;
			bc++;
		}
	}
	
	s = ' ' + s;
	
	for (int ind=1; ind<=n; ind++) {
		for (int r=0; r<=rc; r++) {
			for (int g=0; g<=gc; g++) {
				int b = ind - r - g;
				if (b > bc || b < 0) {
					for (int whi=0; whi<=3; whi++) {
						dp[ind][r][g][whi] = INT_MAX / 2;
					}
				}
				else {
					for (int whi=0; whi<=3; whi++) {
						///
						
						int bt = INT_MAX / 2;
						if (r > 0 && whi != 1) {
							bt = min(bt, (dp[ind-1][r-1][g][1] + abs(rs[r-1] - ind)));
						}
						if (g > 0 && whi != 2) {
							bt = min(bt, (dp[ind-1][r][g-1][2] + abs(gs[g-1] - ind)));
						}
						if (b > 0 && whi != 3) {
							bt = min(bt, (dp[ind-1][r][g][3] + abs(bs[b-1] - ind)));
						}
						dp[ind][r][g][whi] = bt;
						
						///
					}
				}
			}
		}
	}
	
	int re = dp[n][r][g][0];
	
	if (re > n * n * 2) {
		cout << -1 << endl;
	}
	else {
		cout << re / 2 << endl;
	}

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...