Submission #935045

#TimeUsernameProblemLanguageResultExecution timeMemory
935045kimChorus (JOI23_chorus)C++17
16 / 100
15 ms9560 KiB
#include<bits/stdc++.h>
using namespace std;
using ll=long long;

const ll inf=1e18;

int a[5005],b[5005],pos[5005];
ll dp[5005][5005],cost[5005][5005];

int main(){
    ios::sync_with_stdio(false); cin.tie(0);

    int n,K; cin>>n>>K;
    string s; cin>>s;
    for(int i=0,ia=0,ib=0;i<s.length();++i){
        if(s[i]=='A') a[++ia]=i;
        else b[++ib]=i;
    }
    for(int i=1,j=1;i<=n;++i){
        while(j<=n&&b[j]<a[i]) ++j;
        pos[i]=j;
    }
    for(int i=1;i<=n;++i){
        for(int j=min(i,pos[i]-1);j>0;--j){
            cost[j][i]=cost[j][i-1]+pos[i]-j;
        }
    }
    for(int i=1;i<=n;++i) dp[1][i]=cost[1][i];
    for(int k=2;k<=K;++k){
        for(int i=k;i<=n;++i){
            dp[k][i]=inf;
            if(pos[i]<=i) dp[k][i]=dp[k-1][pos[i]-1];
            for(int j=k-1;j<min(i,pos[i]-1);++j){
                dp[k][i]=min(dp[k][i],dp[k-1][j]+cost[j+1][i-1]+pos[i]-j-1);
            }
        }
    }
    cout<<dp[K][n];

    return 0;
}

Compilation message (stderr)

chorus.cpp: In function 'int main()':
chorus.cpp:15:28: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   15 |     for(int i=0,ia=0,ib=0;i<s.length();++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...