Submission #769960

#TimeUsernameProblemLanguageResultExecution timeMemory
769960LittleCubeChorus (JOI23_chorus)C++17
40 / 100
7081 ms99140 KiB
#include <bits/stdc++.h> #define ll long long #define pii pair<int, int> #define pll pair<ll, ll> #define F first #define S second using namespace std; int N, K; ll dp[5005][5005], in[1000006], suf[1000006], tot; char c[2000006]; signed main() { ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); cin >> N >> K; for (int i = 1; i <= 2 * N; i++) cin >> c[i]; for (int i = 1, j = 0, k = 1; i <= N; i++, k++) { while (c[k] != 'B') j++, k++; in[i - 1] = j; } for (int i = 0; i < N; i++) in[i] = max((ll)i, in[i]); for (int i = 1, j = N, k = 1; i <= N; i++, k++) { while (c[k] != 'A') j--, k++; suf[i] = j; } for (int i = N; i >= 0; i--) suf[i] += suf[i + 1]; for (int k = 0; k <= K; k++) for (int i = 0; i <= N; i++) dp[i][k] = 1e18; dp[0][0] = 0; for (int k = 1; k <= K; k++) for (int i = 1; i <= N; i++) { for (int j = 0; j < i; j++) if (in[j] < i) dp[i][k] = min(dp[i][k], dp[j][k - 1] + (i - in[j]) * (N - j) - (suf[in[j] + 1] - suf[i + 1])); else dp[i][k] = min(dp[i][k], dp[j][k - 1] + 0); // cout << dp[i][k] << " \n"[i == N]; } cout << dp[N][K] << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...