← Toate simulatoarele
Programare dinamică · subșir strict crescător maximal (LIS)

Funcția programareDinamica() — simulator pas cu pas

II.1 subprogram Liste Șiruri caractere Matrice Backtracking
II.2 eficient Greedy intervale Reuniune Interclasare LIS LIS tije LCS Kadane Frecvențe Căutare binară
pas 0 / 0
📋 Enunțul problemei

Subșir strict crescător maximal. Se citește de la tastatură un număr natural n (2 ≤ n ≤ 10⁴) și apoi un șir de n numere naturale. Numim subșir o succesiune obținută din șir prin eliminarea eventuală a unora dintre elemente, păstrând ordinea celor rămase (nu neapărat pe poziții consecutive). Un subșir e strict crescător dacă fiecare element este strict mai mare decât cel dinaintea lui. Se cere lungimea maximă a unui subșir strict crescător.

Exemplu: pentru șirul 2 3 10 4 5 6 se afișează 5 (subșirul 2 3 4 5 6).

startApasă „Pas înainte". Calculăm L[i] = lungimea celui mai lung subșir strict crescător care începe la poziția i, mergând de la dreapta la stânga.

Șirul A și tabloul L bara = valoarea A[i] · sub ea, L[i] care se completează

poziția i (o construiesc acum) poziția j (o compar) L deja calculat subșirul maxim (final)

Starea algoritmului vectorii A[] și L[]

L modificat acum poziția i poziția j · = L încă necalculat

Funcția programareDinamica() linia activă e evidențiată

Cod C++

    

Algoritmul în limbaj natural pasul curent e evidențiat