Submission #901563

#TimeUsernameProblemLanguageResultExecution timeMemory
901563Tuanlinh123Chorus (JOI23_chorus)C++17
40 / 100
91 ms4732 KiB
#include<bits/stdc++.h>
#define ll long long
#define pll pair<ll, ll>
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define ld long double
using namespace std;

const ll inf=2e9, maxn=1e3;
ll pre[maxn], to[maxn];
ll n, k, a[maxn], dp[maxn][maxn];

ll cost(ll j, ll i)
{
    if (to[j]>i) return 0;
    return (pre[i]-i*j)-(pre[to[j]-1]-(to[j]-1)*j);
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    cin >> n >> k;
    string s; cin >> s;
    ll x=0, y=0, crr=1;
    for (ll i=0; i<n*2; i++)
    {
        if (s[i]=='A')
            x++, pre[x]=pre[x-1]+y;
        else y++;
    }
    for (ll i=1; i<=n; i++)
        while (crr<=pre[i]-pre[i-1])
            to[crr]=i, crr++;
    while (crr<=n) to[crr]=n+1, crr++;
    for (ll i=1; i<=n; i++)
        if (to[i]<=i)
            to[i]=i+1;
    for (ll i=0; i<=k; i++)
        for (ll j=0; j<=n; j++)
            dp[i][j]=inf*inf;
    dp[0][0]=0;
    for (ll i=1; i<=k; i++)
        for (ll j=1; j<=n; j++)
            for (ll z=0; z<j; z++)
                dp[i][j]=min(dp[i][j], dp[i-1][z]+cost(z, j));
    cout << dp[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...