Submission #1185149

#TimeUsernameProblemLanguageResultExecution timeMemory
1185149petezaMiners (IOI07_miners)C++20
100 / 100
70 ms39748 KiB
#include <bits/stdc++.h> using namespace std; int n; string str; int dp[100005][10][10]; int conv(char x) { return (x == 'M' ? 0 : x == 'B' ? 1 : 2); } int score(int a, int b, int c) { if(a == b && b == c) return 1; if(a != b && b != c && a != c) return 3; return 2; } int main() { cin.tie(0) -> sync_with_stdio(0); cin >> n >> str; int mx = 0; for(int k=0;k<=n;k++) for(int i=0;i<10;i++) for(int j=0;j<10;j++) dp[k][i][j] = -999999999; dp[0][0][0] = 0; for(int i=0;i<n;i++) { int cmx = 0; for(int d1=0;d1<10;d1++) { for(int d2=0;d2<10;d2++) { if(!d1) dp[i+1][conv(str[i])*4+1][d2] = max(dp[i+1][conv(str[i])*4+1][d2], dp[i][d1][d2] + 1); else dp[i+1][(d1-1)%3*3+conv(str[i])+1][d2] = max(dp[i+1][(d1-1)%3*3+conv(str[i])+1][d2], dp[i][d1][d2] + score((d1-1)/3, (d1-1)%3, conv(str[i]))); if(!d2) dp[i+1][d1][conv(str[i])*4+1] = max(dp[i+1][d1][conv(str[i])*4+1], dp[i][d1][d2] + 1); else dp[i+1][d1][(d2-1)%3*3+conv(str[i])+1] = max(dp[i+1][d1][(d2-1)%3*3+conv(str[i])+1], dp[i][d1][d2] + score((d2-1)/3, (d2-1)%3, conv(str[i]))); } } } for(int i=0;i<10;i++) for(int j=0;j<10;j++) mx = max(mx, dp[n][i][j]); cout << mx; }
#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...