Submission #896064

#TimeUsernameProblemLanguageResultExecution timeMemory
896064cadmiumskyChorus (JOI23_chorus)C++17
40 / 100
85 ms2408 KiB
#include <bits/stdc++.h> #define all(x) (x).begin(),(x).end() using namespace std; using ll = long long; using ld = long double; //#define int ll #define sz(x) ((int)(x).size()) using pii = pair<int,int>; using tii = tuple<int,int,int>; const int nmax = 505; const ll inf = 1e9 + 5; int B[nmax]; ll dp[nmax][nmax]; ll sum_under[nmax], cnt_under[nmax]; ll sum_pref[nmax]; signed main() { cin.tie(0) -> sync_with_stdio(0); int n, k; cin >> n >> k; int cnt[2] = {0, 0}; char ch; for(int i = 0; i < 2 * n; i++) { cin >> ch; if(ch == 'A') cnt[0]++; else B[++cnt[1]] = cnt[0]; //cerr << cnt[0] << '\n'; } ll fixing = 0; for(int i = 1; i <= n; i++) { int target = max(B[i - 1], i); fixing += max(0, target - B[i]); B[i] += max(0, target - B[i]); } for(int i = 1; i <= n; i++) cnt_under[B[i]]++, sum_under[B[i]] += B[i], sum_pref[i] = sum_pref[i - 1] + B[i]; for(int i = 1; i <= n; i++) cnt_under[i] += cnt_under[i - 1], sum_under[i] += sum_under[i - 1]; //for(int i = 1; i <= n; i++) //cout << B[i] << ' '; //cout << '\n'; for(int i = 1; i <= n; i++) dp[0][i] = inf; dp[0][n + 1] = 0; for(int dim = 1; dim <= k; dim++) { for(int i = n; i > 0; i--) { int ptr = i; dp[dim][i] = inf; for(int nv = B[i]; nv <= n; nv++) { ll cost = (cnt_under[nv] - i + 1) * nv - (sum_under[nv] - sum_pref[i - 1]); //cerr << i << ": " << B[i] << ' ' << nv << '\t' << cost << '\n'; dp[dim][i] = min(dp[dim - 1][nv + 1] + cost, dp[dim][i]); } } } cout << dp[k][1] + fixing << '\n'; } /** nu toate numerele mari sunt semne de ceva bine -- Si pe mine m-a surprins sa fiu sincer, dar pbn cautati pe net, sunt sigur ca se gasesc mai multe exemple */

Compilation message (stderr)

chorus.cpp: In function 'int main()':
chorus.cpp:66:11: warning: unused variable 'ptr' [-Wunused-variable]
   66 |       int ptr = i;
      |           ^~~
#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...