Submission #425424

#TimeUsernameProblemLanguageResultExecution timeMemory
425424koioi.org-namnamseoGrowing Vegetable is Fun 3 (JOI19_ho_t3)C++17
15 / 100
3 ms1228 KiB
#include <iostream> #include <algorithm> using namespace std; #define rep(i, n) for (int i=0; i<n; ++i) #define rrep(i, n) for (int i=1; i<=n; ++i) const int maxn = 400 + 10; const int inf = int(1e9) + 10; int n; char s[maxn]; int ps[maxn][3]; int dp[maxn][maxn][maxn][3]; int ma, mb, mc; int main() { cin.tie(0)->sync_with_stdio(0); cin >> n >> (s+1); rrep(i, n) { rep(j, 3) ps[i][j] = ps[i-1][j]; ++ps[i][s[i]%4-1]; } ma = ps[n][0]; mb = ps[n][1]; mc = ps[n][2]; rrep(S, n) { for (int a=0; a<=S && a<=ma; ++a) { for (int b=0; b<=S-a && b<=mb; ++b) { int c = S-a-b; if (c>mc) continue; int *d = dp[a][b][c]; rep(i, 3) d[i] = inf; int df = abs(ps[S][0]-a) + abs(ps[S][1]-b) + abs(ps[S][2]-c); int is[3] = {a, b, c}; rep(ui, 3) { if (!is[ui]) continue; --is[ui]; int *bef = dp[is[0]][is[1]][is[2]]; rep(bi, 3) if (ui != bi && bef[bi] != inf) { d[ui] = min(d[ui], bef[bi] + df); } ++is[ui]; } } } } int *aa = dp[ma][mb][mc]; int ans = *min_element(aa, aa+3); if (ans == inf) ans = -1; else ans /= 2; 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...