Rozwiązanie Pseudokod
Transkrypt
Rozwiązanie Pseudokod
Opracowanie SKO: Duchoskoczki Autor zadania: Joachim Jelisiejew, Jacek Tomasiewicz. Rozwiązanie Wprowadźmy oznaczenia: w[i] – maksymalna liczba punktów, którą można uzyskać startując z pola o numerze i. W zadaniu bardzo pomocny jest fakt, że duchy mogą skakać tylko w lewo. Dzięki temu chcąc obliczyć wartość w[i], możemy skorzystać z policzonych już wartości w[a[i]] i w[b[i]]. Kiedy mamy już policzoną tablicę w[], możemy wypisać wynik, którym są indeksy dwóch największych liczb w tablicy w[]. Pseudokod 1. wczytaj(n, a[], b[], c[]) 2. for i := 1 to n do 3. if a[i] = 0 AND b[i] = 0 then 4. 5. w[i] := c[i] else if b[i] = 0 then 6. 7. 8. 9. w[i] := w[a[i]] + c[i] else if a[i] = 0 then w[i] := w[b[i]] + c[i] else 10. 11. 12. 13. 14. 15. 16. 17. 18. w[i] := max(w[a[i]], w[b[i]]) + c[i] w[0] := -∞ best := 0 sec_best := 0 for i := 1 to n do if w[i] > w[best] then sec_best := best best := i else if w[i] > w[sec_best] then 19. sec_best := i 20. wypisz(best, sec_best) Opracowanie SKO: Duchoskoczki 1/1