Submission #1214185

#TimeUsernameProblemLanguageResultExecution timeMemory
1214185emptypringlescanChorus (JOI23_chorus)C++17
16 / 100
299 ms632556 KiB
#include <bits/stdc++.h> using namespace std; int dp[505][505][505]; int n,m; string s; int cost[505][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]=1e9; 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 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...