Submission #1337664

#TimeUsernameProblemLanguageResultExecution timeMemory
1337664khanhphucscratchMiners (IOI07_miners)C++20
100 / 100
359 ms101024 KiB
#include<bits/stdc++.h>
using namespace std;
inline void chmax(int &a, int b)
{
    a = max(a, b);
}
inline int cost(int a, int b, int c)
{
    vector<int> vec;
    if(a > 0) vec.push_back(a);
    if(b > 0) vec.push_back(b);
    if(c > 0) vec.push_back(c);
    sort(vec.begin(), vec.end());
    vec.erase(unique(vec.begin(), vec.end()), vec.end());
    return vec.size();
}
int dp[100005][16][16], a[100005];
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n; cin>>n;
    for(int i = 1; i <= n; i++){
        char x; cin>>x;
        if(x == 'M') a[i] = 1;
        else if(x == 'B') a[i] = 2;
        else a[i] = 3;
    }
    for(int i = 0; i <= n; i++){
        for(int j = 0; j < 16; j++){
            for(int k = 0; k < 16; k++) dp[i][j][k] = -1e9;
        }
    }
    dp[0][0][0] = 0;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < 16; j++){
            for(int k = 0; k < 16; k++) if(dp[i][j][k] >= 0){
                int x1 = (j >> 2), y1 = j%4;
                int x2 = (k >> 2), y2 = k%4;
                //Add to one
                int target = (j >> 2) + (a[i+1] << 2);
                chmax(dp[i+1][target][k], dp[i][j][k] + cost(x1, y1, a[i+1]));
                //Add to two
                target = (k >> 2) + (a[i+1] << 2);
                chmax(dp[i+1][j][target], dp[i][j][k] + cost(x2, y2, a[i+1]));
            }
        }
    }
    int ans = 0;
    for(int i = 0; i < 16; i++){
        for(int j = 0; j < 16; j++) chmax(ans, dp[n][i][j]);
    }
    cout<<ans;
}
#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...