Titlul: ZigZag - Problema de dinamica Scris de: alexandru din Decembrie 30, 2009, 12:21:07 Am urmatoarea problema:
Se numeste o secventa in ZigZag daca alterneaza diferentele dintre elmentele consecutive. De exemplu sirul 1,7,4,9,2,5 este in ZigZag ( diferentele 6,-3,5,-7,3 ). Dat un sir de numere sa se determine cel mai lung subsir de elemente in ZigZag. Am aplicat aceeasi dinamica ca si la subsirul crescator maximal numai ca mai retin intr-un vector alternate ( 0 - diferenta dintre ultimul si antepenultimul element din sir este negativa, 1 daca este pozitiva si 2 daca sirul e format dintr-un singur element ) si un vector topelement unde retin ultimul numar introdus in sir. Am scris urmatorul cod, dar nu imi dau seama unde gresesc :( ( pentru sirul din exemplu da 3 in loc de 6 ). Cod: #define pb push_back Titlul: Răspuns: ZigZag - Problema de dinamica Scris de: Pripoae Teodor Anton din Decembrie 30, 2009, 15:58:52 Eu ma gandeam asa: ti un C[ i ] lungimea maxima sa ai ultimul element din subsir pe i si penultimul mai mare ca v[ i ]. D[ i ]lungimea maxima sa ai ultimul element din subsir pe i si penultimul mai mic ca v[ i ], si E[ i ] = 1.
Cod: C[i] = suma(D[j]) (pt j < i, v[j] > v[i]) + suma(E[j]) (pt j < i, v[j] > v[i]) Titlul: Răspuns: ZigZag - Problema de dinamica Scris de: Andrei Grigorean din Decembrie 30, 2009, 17:47:21 Problema merge rezolvata in O(N log N) intr-un mod asemanator cu algoritmul de gasire a celui mai lung subsir crescator.
|