Algorytmiczny problem

0

Mam takie zadanie:
Ustawianie książek w stos:

Dany jest zbiór książek.
Każda książka ma trzy wymiary (wysokość, szerokość i grubość).
Zadanie polega na ustawieniu jak najwyższego stosu z książek przy czym
książka x może leżeć na książce y wtedy i tylko wtedy
gdy x ma mniejszą szerokość i wysokość niż y.
Wysokość stosu to suma grubości wszystkich książek w stosie.

Jak na razie znalazłem rozwiązanie tego problemu, ale nie jest ono optymalne.

Moje rozwiązanie polega na sprowadzeniu tego problemu do problemu grafowego: wierzchołki to książki, jeśli na daną książkę można położyć inną książkę to prowadzimy do niej krawędź skierowaną o wadze równej -grubość_kładzionej_książki. W tak utworzonym grafie szukamy najkrótszej ścieżki (wszystkie wagi w grafie są przeciwnościami grubości, więc de facto szukamy najdłuższej ścieżki czyli najwyższego stosu). Rozwiązanie to przeciwność długości otrzymanej ścieżki.

Rozwiązanie to nie jest optymalne (tzn. kwadratowe) bo trzeba znaleźć najkrótszą ścieżkę w całym grafie a nie tylko dla konkretnych dwóch wierzchołków.

Nie mam pojęcia jak to inaczej rozwiązać, żeby było optymalnie (po głowie chodzi mi jakaś rekurencja z powrotami, ale nie są to sprecyzowane myśli :p). Nie proszę o rozwiązanie tylko jakąś wskazówkę, która naprowadziłaby mnie na dobry trop :)

0

A może posortuj raz względem szerokości i drugi raz względem wysokości, a następnie odnajdź "najdłuższy"/najgrubszy wspólny podciąg.

Poza tym, aż się prosi o programowanie dynamiczne.

0

Dodaj książkę o grubości 0, która jest większa od każdej pozostałej, a potem zapuść Dijkstrę od tej książki, który szuka najdłuższej ścieżki.

0

Wielkie dzięki za wskazówki - skorzystałem z programowania dynamicznego (dla każdej książki badam wysokość stosu gdy znajduje się ona na szczycie). Wyszła złożoność O(n2) plus O(nlogn) na posortowanie malejące względem pól podstaw.

1 użytkowników online, w tym zalogowanych: 0, gości: 1