Submission #1327408

#TimeUsernameProblemLanguageResultExecution timeMemory
1327408SSKMFGroup Photo (JOI21_ho_t3)C++20
100 / 100
341 ms98328 KiB
#include <bits/stdc++.h>
using namespace std;

int sir[5001] , minim[5001] , aparitii[5001][5001];

int main ()
{
    ios :: sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);

    int lungime;
    cin >> lungime;
    
    for (int indice = 1 ; indice <= lungime ; indice++)
    {
        cin >> sir[indice];

        for (int __indice = 1 ; __indice < indice ; __indice++)
            { aparitii[sir[__indice]][sir[indice]] = 1; }
    }

    for (int linie = 1 ; linie <= lungime ; linie++) {
        for (int coloana = 1 ; coloana <= lungime ; coloana++)
            { aparitii[linie][coloana] += aparitii[linie - 1][coloana] + aparitii[linie][coloana - 1] - aparitii[linie - 1][coloana - 1]; }
    }

    for (int limita = 1 ; limita <= lungime ; limita++)
    {
        minim[limita] = INT32_MAX;
        for (int luat = 1 , termen = 0 ; luat <= limita ; luat++)
        {
            termen += (aparitii[limita - luat + 1][limita] - aparitii[limita - luat][limita]) - (aparitii[limita - luat + 1][limita - luat + 1] - aparitii[limita - luat][limita - luat + 1]);
            minim[limita] = min(minim[limita] , minim[limita - luat] + aparitii[limita][limita - luat] - aparitii[limita - luat][limita - luat] + termen);
        }
    }
    
    cout << minim[lungime];
    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...