Submission #724743

# Submission time Handle Problem Language Result Execution time Memory
724743 2023-04-15T20:31:13 Z hyakup Miners (IOI07_miners) C++17
100 / 100
805 ms 108792 KB
#include <bits/stdc++.h>
using namespace std;

const int maxn = 1e5 + 10;
int v[maxn], dp[maxn][4][4][4][4];
int n; 

int val( char c ){
    if( c == 'M' ) return 1;
    if( c == 'F' ) return 2;
    else return 3;
}

int cost( int x, int y, int z ){
    set<int> s;
    s.insert(x); s.insert(y); s.insert(z);
    s.erase(0);
    return s.size();
}

int solve( int i, int a, int b, int c, int d ){
    if( i == n + 1 ) return 0;
    int& res = dp[i][a][b][c][d];
    if( res != 0 ) return res;
    return res = max( cost( a, b, v[i] ) + solve( i + 1, v[i], a, c, d ), cost( c, d, v[i] ) + solve( i + 1, a, b, v[i], c ) );
}

int main(){
    cin >> n;
    for( int i = 1; i <= n; i++ ){
        char c; cin >> c;
        v[i] = val( c );
    }
    
    int resp = solve( 1, 0, 0, 0, 0 );
    cout << resp;
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 7 ms 1288 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 18 ms 5708 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 84 ms 11124 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 171 ms 27424 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 329 ms 81576 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 805 ms 108792 KB Output is correct