#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define fr first
#define sc second
#define endl '\n'
using namespace std;
int n;
int arr[423];
vector<int>app[3];
int dp[423][423][423][3];
int main(){
ios_base::sync_with_stdio(23^23);cin.tie(NULL);
cin>>n;
for(int i=1;i<=n;i++){
char c;cin>>c;
if(c=='R')arr[i]=1;
if(c=='Y')arr[i]=2;
app[arr[i]].pb(i);
}
for(int i=1;i<=n;i++){
for(int j=0;j<=n;j++){
for(int l=0;l<=n;l++){
for(int r=0;r<3;r++){
dp[i][j][l][r]=1e9;
}
}
}
}
if(app[0].size())dp[1][1][0][0]=app[0][0]-1;
if(app[1].size())dp[1][0][1][1]=app[1][0]-1;
if(app[2].size())dp[1][0][0][2]=app[2][0]-1;
for(int i=1;i<n;i++){
for(int a=0;a<=i;a++){
for(int b=0;b<=i-a;b++){
for(int l=0;l<3;l++){
if(dp[i][a][b][l]==1e9)continue;
int c=i-a-b;
if(l!=0&&a<app[0].size())dp[i+1][a+1][b][0]=min(dp[i+1][a+1][b][0],dp[i][a][b][l]+max(0,app[0][a]-i-1));
if(l!=1&&b<app[1].size())dp[i+1][a][b+1][1]=min(dp[i+1][a][b+1][1],dp[i][a][b][l]+max(0,app[1][b]-i-1));
if(l!=2&&c<app[2].size())dp[i+1][a][b][2]=min(dp[i+1][a][b][2],dp[i][a][b][l]+max(0,app[2][c]-i-1));
}
}
}
}
int ans=min(min(dp[n][app[0].size()][app[1].size()][0],dp[n][app[0].size()][app[1].size()][1]),dp[n][app[0].size()][app[1].size()][2]);
if(ans==1e9)ans=-1;
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... |