Submission #743426

#TimeUsernameProblemLanguageResultExecution timeMemory
743426mickey080929Growing Vegetable is Fun 3 (JOI19_ho_t3)C++14
100 / 100
185 ms389700 KiB
#include <bits/stdc++.h> #define fi first #define se second using namespace std; typedef long long ll; typedef pair<int,int> pii; const int inf = 1e9; int n; int a[410]; int cnt[410]; int inv[3][410][3]; int dp[410][410][410][3]; int main() { int i, j, k, r, g, y; scanf("%d", &n); for (i=1; i<=n; i++) { char c; scanf(" %c", &c); if (c == 'G') a[i] = 1; else if (c == 'Y') a[i] = 2; } for (i=1; i<=n; i++) { cnt[a[i]] ++; for (j=0; j<3; j++) { if (j == a[i]) continue; inv[a[i]][cnt[a[i]]][j] = cnt[j]; } } int R = cnt[0], G = cnt[1], Y = cnt[2]; if (max({R, G, Y}) > (n+1)/2) { printf("-1\n"); return 0; } for (i=0; i<=n; i++) for (r=0; r<=R; r++) for (g=0; g<=G; g++) for (k=0; k<3; k++) dp[i][r][g][k] = inf; dp[0][0][0][0] = dp[0][0][0][1] = dp[0][0][0][2] = 0; for (i=0; i<n; i++) { for (r=0; r<=min(R, i); r++) { for (g=0; g<=min(G, i-r); g++) { y = i - r - g; if (y > Y) continue; for (k=0; k<3; k++) { if (r < R && k != 0) dp[i+1][r+1][g][0] = min(dp[i+1][r+1][g][0], dp[i][r][g][k] + abs(inv[0][r+1][1]-g) + abs(inv[0][r+1][2]-y)); if (g < G && k != 1) dp[i+1][r][g+1][1] = min(dp[i+1][r][g+1][1], dp[i][r][g][k] + abs(inv[1][g+1][0]-r) + abs(inv[1][g+1][2]-y)); if (y < Y && k != 2) dp[i+1][r][g][2] = min(dp[i+1][r][g][2], dp[i][r][g][k] + abs(inv[2][y+1][0]-r) + abs(inv[2][y+1][1]-g)); } } } } printf("%d\n", min({dp[n][R][G][0], dp[n][R][G][1], dp[n][R][G][2]}) / 2); }

Compilation message (stderr)

joi2019_ho_t3.cpp: In function 'int main()':
joi2019_ho_t3.cpp:18:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   18 |     scanf("%d", &n);
      |     ~~~~~^~~~~~~~~~
joi2019_ho_t3.cpp:21:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   21 |         scanf(" %c", &c);
      |         ~~~~~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...