← Toate simulatoarele
Programare dinamică · subșir comun maximal (LCS)

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 (Titularizare 2018)

Subșir comun maximal. Fișierul titu.in conține numere naturale din [1, 10²]: pe prima linie două numere m și n, pe a doua linie un șir de m numere, pe a treia un șir de n numere. Se cere numărul de termeni ai celui mai lung subșir comun al celor două șiruri, cu un algoritm eficient ca timp. Un subșir se obține eliminând eventual unele numere, dar păstrând ordinea celor rămase.

Exemplu: pentru 4 7 9 8 3 și 1 4 2 9 7 6 8 2 se afișează 3 (un subșir comun maxim: 4 7 8).

startApasă „Pas înainte". Completăm tabelul D[i][j] = numărul de termeni ai subșirului comun al prefixelor A[1..i] și B[1..j], linie cu linie.

Tabelul D rânduri = numerele lui A · coloane = numerele lui B

celula curentă diagonala (număr comun) sus / stânga (maxim) drumul subșirului

Starea algoritmului celula (i, j) și comparația

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

Cod C++

    

Algoritmul în limbaj natural pasul curent e evidențiat