#include <bits/stdc++.h>
using namespace std;
int dp[505][505][1005];
int n,m;
string s;
int cost[1005][505][505];
int ones[505];
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
for(int i=0; i<505; i++) for(int j=0; j<505; j++) for(int k=0; k<505; k++) dp[i][j][k]=1e8;
cin >> n >> m;
cin >> s;
int cnt=1;
for(int i=1; i<=2*n; i++){
if(s[i-1]=='B'){
ones[cnt]=i;
cnt++;
}
}
for(int i=1; i<=2*n; i++){
for(int j=1; j<=n; j++){
int cur=0;
for(int k=j; k<=n; k++){
cur+=(ones[k]>=i+k-j?0:i+k-j-ones[k]);
cost[i][j][k]=cur;
}
}
}
dp[0][0][0]=0;
for(int i=0; i<=m; i++){
for(int j=0; j<=n; j++){
for(int k=ones[j]; k<=n*2; k++){
if(k+1<=2*n&&i) dp[i][j][k+1]=min(dp[i][j][k+1],dp[i][j][k]+1);
if(i<m&&k-j+1<=n&&k+k-2*j+1<=2*n&&k-j+1>j) dp[i+1][k-j+1][max(ones[k-j+1],k+k-2*j+1)]=min(dp[i+1][k-j+1][max(ones[k-j+1],k+k-2*j+1)],dp[i][j][k]+cost[k+1][j+1][k-j+1]);
}
}
}
int ans=dp[m][n][2*n];
//cout << ans << '\n';
for(int i=n+1; i<2*n; i++){
//cout << dp[m][i-n][i] << ' ' << cost[i+1][i-n+1][n] << '\n';
ans=min(ans,dp[m][i-n][i]+cost[i+1][i-n+1][n]);
}
cout << ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |