#include<bits/stdc++.h>
using namespace std;
#define task "a"
#define se second
#define fi first
#define ll long long
#define ii pair<ll, ll>
const long mxN = 4e2 + 7;
const ll inf = 1e18 + 7;
int n, cnt[4], pass[mxN][4];
ll dp[mxN][mxN][4], rem[4];
string s;
char chr[4] = {'Y', 'G', 'R'};
vector<int> vt[4];
ll step(vector<int> num, int k)
{
k = vt[k][num[k]];
int sum = 0;
for (int i = 0; i < 3; i++)
sum += min(num[i], pass[k][i]);
return k - sum;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
//freopen(task".INP", "r", stdin);
//freopen(task".OUT", "w", stdout);
cin >> n;
cin >> s;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < 3; j++)
{
pass[i][j] = cnt[j];
if (s[i] == chr[j])
{
cnt[j]++;
vt[j].push_back(i);
}
}
}
for (int j = 0; j < 3; j++)
vt[j].push_back(n);
for (int u = 0; u < 3; u++)
{
for (int j = 0; j <= cnt[0]; j++)
{
for (int i = 0; i <= cnt[1]; i++)
dp[j][i][u] = inf;
}
dp[0][0][u] = 0;
}
for (int i = 0; i < n; i++)
{
for (int j = cnt[0]; j >= 0; j--)
{
for (int u = cnt[1]; u >= 0; u--)
{
if (j + u > i || i - u - j > cnt[2])
{
dp[j][u][2] = dp[j][u][0] = dp[j][u][1] = inf;
continue;
}
dp[j + 1][u][0] = min({dp[j + 1][u][0], dp[j][u][1] + step({j, u, i - u - j}, 0), dp[j][u][2] + step({j, u, i - j - u}, 0)});
dp[j][u + 1][1] = min({dp[j][u + 1][1], dp[j][u][0] + step({j, u, i - u - j}, 1), dp[j][u][2] + step({j, u, i - j - u}, 1)});
dp[j][u][2] = min(dp[j][u][1] + step({j, u, i - u - j}, 2), dp[j][u][0] + step({j, u, i - u - j}, 2));
dp[j][u][0] = dp[j][u][1] = inf;
}
}
}
ll ans = inf;
for (int i = 0; i < 3; i++)
ans = min(ans, dp[cnt[0]][cnt[1]][i]);
if (ans == inf)
cout << -1;
else
cout << ans;
}
# | 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... |