Można spróbować ulepszyć klasyczny algorytm znajdowania najdłuższego podciągu będącego palindromem. Zobacz że do dp dodajemy 2 wtedy gdy arr[l] == arr[r], inaczej bierzemy maksa z wcześniej policzonych dp. Skorzystajmy z tego, że jest co najwyżej 10 takich samych liczb. Dla każdej liczby rozpatrzmy wszystkie takie pary tej liczby z samą sobą (będzie ich maks ok. 100). Jeśli pierwsza liczba z pary jest na pozycji l, a druga na r to szukamy innej pary l', r' dla której policzyliśy już wcześniej wynik i l < l', r' < r i ze wszystkich takich par (l', r') szukamy takiej dla której długość powstałego palindormu była największa i dodajemy 2. Pytanie w jakiej kolejności przechodzić po tych parach. Wydaje mi się że posortowanie po r i zrobienie na tym drzewa przedziałowego (maks na przedziale) powinno wystarczyć.