제출 #578072

#제출 시각아이디문제언어결과실행 시간메모리
578072Hacv16Miners (IOI07_miners)C++17
45 / 100
2 ms1032 KiB
#include<bits/stdc++.h> using namespace std; #define pb push_back #define fr first #define sc second typedef long long ll; const int MAX = 25; const int INF = 0x3f3f3f3f; string s; int n, v[MAX], memo[MAX][5][5][5][5]; //optimize memory int f(char c){ if(c == 'M') return 1; else if(c == 'F') return 2; return 3; } int add(int a, int b, int c){ //size of {a, b, c} int aux = 0; if(a) aux |= (1 << a); if(b) aux |= (1 << b); if(c) aux |= (1 << c); return __builtin_popcount(aux); } int dp(int i, int a1, int a2, int b1, int b2){ if(memo[i][a1][a2][b1][b2] != -1) return memo[i][a1][a2][b1][b2]; if(i == n + 1) return 0; int cur = -INF; cur = max(cur, dp(i + 1, v[i], a1, b1, b2) + add(v[i], a1, a2)); cur = max(cur, dp(i + 1, a1, a2, v[i], b1) + add(v[i], b1, b2)); return memo[i][a1][a2][b1][b2] = cur; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); memset(memo, -1, sizeof(memo)); cin >> n >> s; for(int i = 0; i < n; i++) v[i + 1] = f(s[i]); cout << dp(1, 0, 0, 0, 0) << '\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...
#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...