← Subiecte de Titularizare
Titularizare 2019 · Subiectul II, problema 2

Secvență de sumă maximă (Kadane) — simulator

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 2019)

Secvență de sumă maximă. Numim secvență de sumă S o succesiune de cel puțin doi termeni aflați pe poziții consecutive, cu suma S. Fișierul titu2019.in conține cel mult 10⁶ numere întregi din [-10³, 10³]. Se cere cel mai mare S pentru care există o astfel de secvență, cu algoritm eficient ca timp și memorie.

Exemplu: pentru -3 4 2 -7 0 8 1 -5 4 6 -6 5 -100 50 -100 se afișează 14.

Atenție: „cel puțin doi termeni” schimbă algoritmul. Kadane clasic ar răspunde 50 (elementul izolat) — greșit. De aceea se țin două stări.

startApasă „Pas înainte”. Urmărim două variabile: d = cea mai bună secvență de ≥1 termen care se termină aici, și e = cea mai bună de ≥2 termeni. Răspunsul vine numai din e.

Șirul din fișier poziția curentă și secvențele urmărite

numărul curent secvența lui d (≥1 termen) secvența lui e (≥2 termeni) cea mai bună găsită

Starea algoritmului cele două variabile

Codul C++ linia activă e evidențiată

Cod C++

    

Algoritmul în limbaj natural pasul curent e evidențiat