Submission #1188423

#TimeUsernameProblemLanguageResultExecution timeMemory
1188423M_W_13Growing Vegetable is Fun 3 (JOI19_ho_t3)C++20
100 / 100
386 ms755400 KiB
#include <bits/stdc++.h> using namespace std; #define rep(i, n) for (int i = 0; i < (n); i++) typedef long long ll; #define pb push_back #define st first #define nd second const int MAXN = 401; int INF = 1e9; int dp[MAXN][MAXN][MAXN][3]; int jakie[MAXN][3][3]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; int T[n]; string s; cin >> s; vector<int> p[3]; rep(c, 3) { p[c].pb(-1); } rep(i, n) { if (s[i] == 'R') { T[i] = 0; } else if (s[i] == 'G') { T[i] = 1; } else { T[i] = 2; } p[T[i]].pb(i); } int sz[3]; rep(c, 3) { sz[c] = p[c].size(); } if (n == 1) { cout << 0 << '\n'; return 0; } int iter[3]; rep(c, 3) { iter[c] = 0; rep(d, 3) { jakie[0][c][d] = 0; } } rep(i, n) { iter[T[i]]++; rep(c, 3) { jakie[iter[T[i]]][T[i]][c] = iter[c]; } } rep(i, n) { rep(j, n) { rep(k, n) { rep(c, 3) { dp[i][j][k][c] = INF; } } } } rep(c, 3) { dp[0][0][0][c] = 0; } rep(i, n) { rep(j, n) { rep(k, n) { if ((i + j + k) == 0) { continue; } if (i >= sz[0] || j >= sz[1] || k >= sz[2]) { continue; } rep(c, 3) { if (c == 0) { if (i > 0) { dp[i][j][k][c] = max(0, j - jakie[i][c][1]) + max(0, k - jakie[i][c][2]) + min(dp[i - 1][j][k][1], dp[i - 1][j][k][2]); } } else if (c == 1) { if (j > 0) { dp[i][j][k][c] = max(0, i - jakie[j][c][0]) + max(0, k - jakie[j][c][2]) + min(dp[i][j - 1][k][0], dp[i][j - 1][k][2]); } } else { if (k > 0) { dp[i][j][k][c] = max(0, i - jakie[k][c][0]) + max(0, j - jakie[k][c][1]) + min(dp[i][j][k - 1][0], dp[i][j][k - 1][1]); } } // cout << "i = " << i << " j = " << j << " k = " << k << " c = " << c << " dp = " << dp[i][j][k][c] << '\n'; } } } } int ans = INF; rep(c, 3) { ans = min(ans, dp[sz[0] - 1][sz[1] - 1][sz[2] - 1][c]); } if (ans >= INF) { cout << -1 << '\n'; return 0; } cout << ans << '\n'; return 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...