제출 #1355716

#제출 시각아이디문제언어결과실행 시간메모리
1355716alexddChorus (JOI23_chorus)C++20
40 / 100
7093 ms99144 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

const int INF = 1e18;
const int MAXN = 5e3 + 5;

int n,k;
string s;
int pozb[MAXN];

int dp[MAXN][MAXN];

int calc(int old, int tot)
{
    int aux = 0;
    for(int u=old+1;u<=tot;u++)
    {
        aux += max((int)0, tot - pozb[u]);
    }
    return aux;
}

signed main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);
    cin>>n>>k>>s;
    assert(s.size() == 2 * n);
    int cnta = 0, cntb = 0;
    for(int i=0;i<2*n;i++)
    {
        if(s[i] == 'A')
        {
            cnta++;
        }
        else
        {
            cntb++;
            pozb[cntb] = cnta;
        }
    }

    //for(int i=1;i<=n;i++)cerr<<pozb[i]<<" ";cerr<<"pozb\n";

    assert(cnta == n && cntb == n);
    for(int i=0;i<=n;i++)
        for(int cnt=0;cnt<=k;cnt++)
            dp[i][cnt] = INF;
    dp[0][0] = 0;
    for(int i=1;i<=n;i++)
    {
        for(int cnt=1;cnt<=k;cnt++)
        {
            for(int old=0;old<i;old++)
            {
                dp[i][cnt] = min(dp[i][cnt], dp[old][cnt-1] + calc(old, i));
            }
        }
    }
    cout<<dp[n][k];
    return 0;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…