Submission #1183383

#TimeUsernameProblemLanguageResultExecution timeMemory
1183383alterioGrowing Vegetable is Fun 3 (JOI19_ho_t3)C++20
20 / 100
74 ms163812 KiB
#include <bits/stdc++.h> using namespace std; #define endl '\n' #define ll long long #define all(x) (x).begin(), (x).end() const int mxn = 402; int dp[mxn][mxn][mxn][3], sum[mxn][3], pos[mxn][3], cnt[3]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n; cin >> n; string s; cin >> s; s = "." + s; for (int i = 1; i <= n; i++) { if (s[i] == 'R') pos[++cnt[0]][0] = i; if (s[i] == 'G') pos[++cnt[1]][1] = i; if (s[i] == 'Y') pos[++cnt[2]][2] = i; for (int j = 0; j < 3; j++) sum[i][j] = cnt[j]; } for (int j = 0; j < 3; j++) dp[0][0][0][j] = 0; for (int i = 1; i <= n; i++) { for (int r = 0; r <= min(i, cnt[0]); r++) { for (int g = 0; g + r <= i && g <= cnt[1]; g++) { int y = i - (r + g); if (y > cnt[2]) continue; if (r) dp[i][r][g][0] = min(dp[i - 1][r - 1][g][1], dp[i - 1][r - 1][g][2]) + max(0, g - sum[pos[r][0]][1]) + max(0, y - sum[pos[r][0]][2]); else dp[i][r][g][0] = 1e9; if (g) dp[i][r][g][1] = min(dp[i - 1][r][g - 1][0], dp[i - 1][r][g - 1][2]) + max(0, r - sum[pos[g][1]][0]) + max(0, y - sum[pos[g][1]][2]); else dp[i][r][g][1] = 1e9; if (y) dp[i][r][g][2] = min(dp[i - 1][r][g][0], dp[i - 1][r][g][1]) + max(0, r - sum[pos[y][2]][0] + max(0, g - sum[pos[y][2]][1])); else dp[i][r][g][2] = 1e9; } } } int ans = 1e9; for (int j = 0; j < 3; j++) ans = min(ans, dp[n][cnt[0]][cnt[1]][j]); cout << (ans == 1e9 ? -1 : ans); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...