제출 #1212125

#제출 시각아이디문제언어결과실행 시간메모리
1212125biankGrowing Vegetable is Fun 3 (JOI19_ho_t3)C++20
100 / 100
395 ms780512 KiB
#include <bits/stdc++.h> using namespace std; #define forn(i,n) for(int i=0;i<int(n);i++) #define forsn(i,s,n) for(int i=int(s);i<int(n);i++) #define dforn(i,n) for(int i=int(n)-1;i>=0;i--) #define dforsn(i,s,n) for(int i=int(n)-1;i>=int(s);i--) #define fst first #define snd second #define pb push_back #define eb emplace_back #define sz(x) (int)x.size() #define all(x) x.begin(), x.end() typedef long long ll; typedef vector<ll> vll; typedef vector<int> vi; typedef pair<int,int> ii; const int N=405; const int INF=1e9; int dp[N][N][N][3]; void chmin(int &x, int v){ if(x>v) x=v; } int main(){ ios::sync_with_stdio(0); cin.tie(0); int n; string s; cin>>n>>s; vi pos[3]; vi pref[3]; forn(t,3) pref[t].assign(n+1,0); forn(i,n){ forn(t,3) pref[t][i+1]=pref[t][i]; int t=s[i]=='R'?2:s[i]=='G'; pos[t].pb(i),pref[t][i+1]++; } forn(i,N) forn(j,N) forn(k,N) forn(t,3) dp[i][j][k][t]=INF; dp[0][0][0][0]=dp[0][0][0][1]=dp[0][0][0][2]=0; forn(i,sz(pos[0])+1) forn(j,sz(pos[1])+1) forn(k,sz(pos[2])+1) forn(t,3){ int idx=t==0?i:t==1?j:k; if(idx>=sz(pos[t])) continue; int p=pos[t][idx]; int cost=0; forn(t2,3) if(t2!=t){ int idx2=t2==0?i:t2==1?j:k; if(pref[t2][p+1]<idx2) cost+=idx2-pref[t2][p+1]; } int best=INF; forn(t2,3) if(t2!=t){ chmin(best,dp[i][j][k][t2]); } chmin(dp[i+(t==0)][j+(t==1)][k+(t==2)][t],best+cost); } int res=INF; forn(t,3) chmin(res,dp[sz(pos[0])][sz(pos[1])][sz(pos[2])][t]); if(res==INF) cout<<"-1\n"; else cout<<res<<'\n'; 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...