Algorytm wielokąta z wagą na wierzchołkach i operacjami na krawędziach

Myślę o algorytmie dla następującego problemu (znalezionego na carrercup):

Biorąc pod uwagę wielokąt z N wierzchołkami i N krawędziami. Na każdym wierzchołku jest liczba int (może być ujemna), a na każdej krawędzi operacja w zbiorze (*, +). Za każdym razem usuwamy krawędź E z wielokąta, łączymy dwa wierzchołki połączone krawędzią (V1, V2) z nowym wierzchołkiem o wartości: V1 op (E) V2. Ostatni przypadek to dwa wierzchołki o dwóch krawędziach, wynik jest większy. Zwróć maksymalną wartość wyniku można uzyskać z danego wielokąta.

Myślę, że możemy użyć tylko zachłannego podejścia. To znaczy. dla wielokąta o k krawędziach znajdź parę (p, q), która tworzy maksymalną liczbę podczas zwijania: (p, q) = max ({i operacja j: i, j - sąsiadujące krawędzie)

Następnie wywołaj rekurencję na wielobokach: 1. Niech funkcja CollapseMaxPair (P (k)) - pobiera wielokąt z krawędziami k i zwraca „zwinięty” wielokąt z krawędziami k-1 2. Następnie nasza rekurencja:

 P = P(N);
 Releat until two edges left
     P =  CollapseMaxPair( P )
 maxvalue = max ( two remained values)

Co myślisz?

questionAnswers(3)

yourAnswerToTheQuestion