제출 #1245775

#제출 시각아이디문제언어결과실행 시간메모리
1245775warrennMiners (IOI07_miners)C++20
100 / 100
223 ms210412 KiB
#include<bits/stdc++.h> using namespace std; #define int long long int n; string s; int dp[100002][4][4][4][4]; int coal(int a,int b,int c){ int cnt[4]; cnt[0]=cnt[1]=cnt[2]=cnt[3]=0; cnt[a]++; cnt[b]++; cnt[c]++; if(cnt[1]==1 && cnt[2]==1 && cnt[3]==1)return 3; if(cnt[1]>=1){ if(cnt[2]>=1 || cnt[3]>=1)return 2; return 1; } if(cnt[2]>=1){ if(cnt[1]>=1 || cnt[3]>=1)return 2; return 1; } if(cnt[3]>=1){ if(cnt[2]>=1 || cnt[1]>=1)return 2; return 1; } return 1; } int conv(char a){ if(a=='M')return 1; if(a=='B')return 2; if(a=='F')return 3; return 0; } int f(int idx,int a,int b,int c,int d){ if(idx==n+1)return 0; if(dp[idx][a][b][c][d]!=-1)return dp[idx][a][b][c][d]; int res=0; res=max(res,f(idx+1,b,conv(s[idx-1]),c,d)+coal(a,b,conv(s[idx-1]))); res=max(res,f(idx+1,a,b,d,conv(s[idx-1]))+coal(c,d,conv(s[idx-1]))); return dp[idx][a][b][c][d]=res; } signed main(){ cin>>n>>s; memset(dp,-1,sizeof dp); cout<<f(1,0,0,0,0)<<endl; }
#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...
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...