제출 #1177471

#제출 시각아이디문제언어결과실행 시간메모리
1177471LmaoLmaoGrowing Vegetable is Fun 3 (JOI19_ho_t3)C++20
60 / 100
2 ms3400 KiB
#include<bits/stdc++.h> #define fi first #define se second #define int long long using namespace std; using ll = long long; using ii = pair<int, int>; using aa = array<int,3>; const int N = 205; const int INF = 1e9; int dp[N][N][N][3]; int nxt[N][3]; int pre[N][3]; int pos[N][3]; void solve(int r,int b,int y,int i) { int cur[3]={r,b,y}; for(int j=0;j<3;j++) { if(cur[j]==0) continue; int pos0=pos[cur[j]][j]; int j1=(j+1)%3,j2=(j+2)%3; int pos1=pos[cur[j1]][j1]; int pos2=pos[cur[j2]][j2]; int t=pos0+max(0LL,cur[j1]-pre[pos0][j1])+max(0LL,cur[j2]-pre[pos0][j2])-i; int nw[3]={cur[0],cur[1],cur[2]}; nw[j]--; int mi=min(dp[nw[0]][nw[1]][nw[2]][j1],dp[nw[0]][nw[1]][nw[2]][j2]); dp[cur[0]][cur[1]][cur[2]][j]=mi+t; } } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n; cin >> n; for(int i=1;i<=n;i++) { char x; cin >> x; int t=0; if(x=='G') t=1; if(x=='Y') t=2; pre[i][t]++; for(int j=0;j<3;j++) { pre[i][j]+=pre[i-1][j]; if(pre[i][j]>(n+1)/2) { cout << -1; return 0; } } pos[pre[i][t]][t]=i; } for(int i=n;i>0;i--) { for(int j=0;j<3;j++) { nxt[i][j]=nxt[i+1][j]; if(pre[i][j]-pre[i-1][j]==1) nxt[i][j]=i; } } for(int i=0;i<=pre[n][0];i++) { for(int j=0;j<=pre[n][1];j++) { for(int k=0;k<=pre[n][2];k++) { for(int l=0;l<3;l++) dp[i][j][k][l]=1e9; } } } for(int i=0;i<3;i++) dp[0][0][0][i]=0; for(int i=1;i<=n;i++) { for(int r=0;r<=pre[n][0];r++) { for(int b=0;b<=pre[n][1];b++) { int y=i-r-b; if(y<0) break; if(max({y,r,b})>(i+1)/2) { continue; } solve(r,b,y,i); //cout << r << ' ' << b << ' ' << y << ' ' << min({dp[r][b][y][0],dp[r][b][y][1],dp[r][b][y][2]}) << endl;; } } } int ans=1e9; for(int i=0;i<3;i++) { ans=min(ans,dp[pre[n][0]][pre[n][1]][pre[n][2]][i]); } cout << ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...