Jetoane2

Problema se rezolva prin programare dinamica. Vom considera 2 matrici:

  • Ai, j = 1 daca intervalul de jetoane dintre pozitiile i si j poate fi eliminat, sau 0, altfel.
  • Bi, j, k = 1 daca intre pozitiile i si j se poate plasa al k-lea cuvant si se poate elimina tot intervalul, sau 0, altfel.

Astfel Bi, j k = 1 daca si numai daca exista un p ∈ [i, j], astfel incat:

  1. Cuvk, l = Sirp+l, ∀ 1lLungk
  2. Ai, p-1 = A (i+Lung{k}) , j = 1

Sirp+l reprezinta sirul initial, Cuvk, l reprezinta a l-a litera din al k-lea cuvant si Lungk, lungimea acestuia. Dinamica se va calcula, crescator, dupa lungimea intervalului [i, j]. Daca ∃ k astfel incat Bi, j, k = 1, atunci Ai, j = 1.

Dupa determinarea valorilor lui A si cum scorul depinde exclusiv de intervalele [i, j] ce pot fi eliminate, se va aduna la rezultat suma ponderilor de pe toate intervalele [i, j] cu Ai, j = 1.

Complexitatea solutiei este O(N * L3 * CONST), unde L reprezinta lungimea sirului initial, iar CONST = 10.

Exista si o solutie de complexitate O(N * L3), care, in practica, merge mai repede. Aceasta solutie a fost data de catre Cosmin Gheorghe si o voi publica imediat dupa ce primesc acordul sau.