Ho dei libri e uno scaffale. Vorrei mettere quanti più libri sullo scaffale possibile ma ho una regola. Tutte le dimensioni dei libri (altezza, larghezza e profondità) dovrebbero formare una sequenza non crescente sullo scaffale.
Ciò significa che ogni libro deve essere alto almeno quanto quelli che lo seguono da solo. Lo stesso vale per larghezza e profondità. Non è possibile ruotare i libri per scambiarne altezza, larghezza e profondità.
Dovresti scrivere un programma o una funzione che fornisca le dimensioni di tutti i libri come output di input o restituisca il numero massimo di libri che posso mettere sullo scaffale.
Ingresso
- Un elenco di terzine di numeri interi positivi in cui ogni terzina definisce l'altezza, la larghezza e la profondità di un libro.
- Ci sarà almeno una tripletta nell'elenco di input.
- Due libri possono avere le stesse lunghezze in qualsiasi numero di dimensioni.
Produzione
- Un unico numero intero positivo, il numero massimo di libri che si adattano allo scaffale obbedendo alla regola.
Complessità temporale
Il tuo algoritmo dovrebbe avere un polinomio di complessità nel caso peggiore nel numero di libri. Ciò significa che ad esempio sono valide tutte le seguenti complessità temporali: O (N ^ 3), O (log (N) * N ^ 2), O (N) e le seguenti non sono valide: O (2 ^ N), O (N!), O (N ^ N).
Esempi
Input => Output
(1, 1, 1) => 1
(5, 2, 5), (1, 3, 5) => 1
(5, 2, 5), (1, 2, 5) => 2
(2, 2, 2), (2, 2, 2), (2, 2, 2), (1, 3, 6) => 3
(1, 2, 5), (1, 3, 5), (1, 2, 8), (1, 2, 5), (7, 7, 7) => 4
(5, 19, 3), (9, 4, 16), (15, 16, 13), (7, 4, 16), (1, 13, 14), (20, 1, 15), (9, 8, 19), (4, 11, 1) => 3
(1, 1, 18), (1, 13, 7), (14, 1, 17), (8, 15, 16), (18, 8, 12), (8, 8, 15), (10, 1, 14), (18, 4, 6), (10, 4, 11), (17, 14, 17), (7, 10, 10), (19, 16, 17), (13, 19, 2), (16, 8, 13), (14, 6, 12), (18, 12, 3) => 5
Questo è il codice golf, quindi vince l'ingresso più breve.
Un'interessante sfida di ordinamento dei libri correlata: ordinamento di stack di libri .