Tengo algunos libros y una estantería. Me gustaría poner tantos libros en el estante como sea posible, pero tengo una regla. Todas las dimensiones de los libros (altura, ancho y profundidad) deben formar una secuencia no creciente en el estante.
Esto significa que todos los libros tienen que ser al menos tan altos como los que están detrás de él. Lo mismo ocurre con el ancho y la profundidad. No puede girar los libros para intercambiar su altura, ancho y profundidad.
Debería escribir un programa o función que, dado las dimensiones de todos los libros como entradas o salidas, devuelva el número máximo de libros que puedo poner en el estante.
Entrada
- Una lista de trillizos de enteros positivos donde cada trillizo define la altura, el ancho y la profundidad de un libro.
- Habrá al menos un triplete en la lista de entrada.
- Dos libros pueden tener la misma longitud a lo largo de cualquier cantidad de dimensiones.
Salida
- Un solo entero positivo, el número máximo de libros que caben en el estante obedeciendo la regla.
Complejidad de tiempo
Su algoritmo debe tener un polinomio de complejidad de tiempo en el peor de los casos en el número de libros. Esto significa que, por ejemplo, las siguientes complejidades temporales son todas válidas: O (N ^ 3), O (log (N) * N ^ 2), O (N) y las siguientes no son válidas: O (2 ^ N), O (N!), O (N ^ N).
Ejemplos
Entrada => Salida
(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
Este es el código de golf, por lo que gana la entrada más corta.
Un desafío interesante relacionado con la clasificación de libros: Book Stack Sort .