이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
using ull = unsigned long long;
#define all(x) x.begin(), x.end()
template <typename T1, typename T2> inline void chkmin(T1 &x, const T2 & y) {if (x > y) x = y;}
template <typename T1, typename T2> inline void chkmax(T1 &x, const T2 & y) {if (x < y) x = y;}
const int MAXN = 410;
int n;
int a[MAXN];
void read() {
cin >> n;
for (int i = 1; i <= n; i++) {
char x;
cin >> x;
if (x == 'R') a[i] = 0;
else if (x == 'G') a[i] = 1;
else a[i] = 2;
}
}
const int INF = 1e9 + 10;
int dp[MAXN][MAXN][3][3];
void build() {
for (int l = 0; l < MAXN; l++)
for (int r = 0; r < MAXN; r++)
for (int chL = 0; chL < 3; chL++)
for (int chR = 0; chR < 3; chR++)
dp[l][r][chL][chR] = INF;
}
void calc() {
for (int r = 1; r <= n; r++) {
for (int l = r; l >= 1; l--) {
if (l == r) {
dp[l][r][a[l]][a[l]] = 0;
continue;
}
for (int chL = 0; chL < 3; chL++) {
for (int chR = 0; chR < 3; chR++) {
if (chL != a[r]) {
chkmin(dp[l][r][a[r]][chR], dp[l][r - 1][chL][chR] + (r - l));
}
if (chR != a[l]) {
chkmin(dp[l][r][chL][a[r]], dp[l + 1][r][chL][chR] + (r - l));
}
}
}
for (int chL = 0; chL < 3; chL++) {
for (int chR = 0; chR < 3; chR++) {
for (int mid = l; mid < r; mid++) {
for (int chMid_L = 0; chMid_L < 3; chMid_L++) {
for (int chMid_R = 0; chMid_R < 3; chMid_R++) {
if (chMid_L == chMid_R) continue;
chkmin(dp[l][r][chL][chR], dp[l][mid][chL][chMid_L] + dp[mid + 1][r][chMid_R][chR]);
}
}
}
}
}
}
}
}
int ans;
void make_ans() {
ans = INF;
for (int chL = 0; chL < 3; chL++) {
for (int chR = 0; chR < 3; chR++) {
chkmin(ans, dp[1][n][chL][chR]);
}
}
if (ans == INF) ans = -1;
}
void run() {
build();
calc();
make_ans();
}
void write() {
cout << ans << endl;
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
read();
run();
write();
return 0;
}
# | 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... |