Submission #868840

#TimeUsernameProblemLanguageResultExecution timeMemory
868840Darren0724Growing Vegetable is Fun 3 (JOI19_ho_t3)C++17
100 / 100
309 ms780644 KiB
#include<bits/stdc++.h> using namespace std; #define LCBorz ios_base::sync_with_stdio(false);cin.tie(0); #define all(x) x.begin(),x.end() const int INF=1e9; const int mod=998244353; const int N=405; int dp[3][405][405][405]{}; int32_t main(){ LCBorz; int n;cin>>n; string s;cin>>s; int r=0,g=0,y=0; vector<pair<int,int>> r1,g1,y1; for(int i=0;i<n;i++){ if(s[i]=='R'){ r1.push_back({g,y}); r++; } if(s[i]=='G'){ g1.push_back({y,r}); g++; } if(s[i]=='Y'){ y1.push_back({r,g}); y++; } } r1.push_back({0,0}); g1.push_back({0,0}); y1.push_back({0,0}); for(int i=0;i<3;i++){ for(int j=0;j<N;j++){ for(int k=0;k<N;k++){ for(int p=0;p<N;p++){ dp[i][j][k][p]=INF; } } } } dp[0][0][0][0]=0; dp[1][0][0][0]=0; dp[2][0][0][0]=0; for(int i=0;i<=r;i++){ for(int j=0;j<=g;j++){ for(int k=0;k<=y;k++){ //cout<<i<<' '<<j<<' '<<k<<' '<<endl; int r2=max((int)0,r1[i].first-j)+max((int)0,r1[i].second-k); int g2=max((int)0,g1[j].first-k)+max((int)0,g1[j].second-i); int y2=max((int)0,y1[k].first-i)+max((int)0,y1[k].second-j); dp[0][i+1][j][k]=min(dp[0][i+1][j][k],min(dp[1][i][j][k],dp[2][i][j][k])+r2); dp[1][i][j+1][k]=min(dp[1][i][j+1][k],min(dp[2][i][j][k],dp[0][i][j][k])+g2); dp[2][i][j][k+1]=min(dp[2][i][j][k+1],min(dp[0][i][j][k],dp[1][i][j][k])+y2); } } } int ans=min({dp[0][r][g][y],dp[1][r][g][y],dp[2][r][g][y]}); cout<<(ans==INF?-1:ans)<<endl; 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...