Saltar al contenido

Los cortes de la tabla

Enunciado

Don Filiberto tiene la carpintería de la esquina y cobra los cortes por el largo de la pieza que mete a la sierra: partir una tabla de 10 centímetros cuesta 10, sin importar por dónde la parta. Le llega una tabla con las marcas de la clienta y tiene que cortarla por todas, pero el orden lo elige él, y ahí está el ahorro: con el primer corte le quedan dos piezas más cortas, y cada corte que sigue se paga sobre la pieza en la que cae.

Escribe una función que reciba largo, un entero de 1 en adelante (los centímetros que mide la tabla), y marcas, una lista de enteros distintos de 1 a largo menos 1: a cuántos centímetros de la orilla izquierda va cada corte. Las marcas vienen en cualquier orden y la lista puede venir vacía. Regresa un entero: lo menos que le puede costar hacer todos los cortes.

Con una tabla de 10 y marcas en 2, 4 y 7, lo más barato cuesta 20.

Cortar primero en el 4 cuesta 10 y deja las piezas de 0 a 4 y de 4 a 10; el corte en el 2 ya cae en una pieza de 4 y el corte en el 7 en una de 6, así que la cuenta es 10 más 4 más 6. Empezar por el 2 sale más caro: 10, luego 8 por el corte en el 4 y 6 por el corte en el 7, son 24.

Con una sola marca no hay nada que elegir: el único corte cuesta largo. Si no hay marcas, no hay nada que cortar y la respuesta es 0.

Hay tablas de hasta 20 marcas.

Ejemplos

  • El ejemplo

    10, [2, 4, 7] → 20

  • Cortar por la orilla primero sale caro

    20, [1, 9, 10, 11, 19] → 51

  • Una sola marca

    8, [3] → 8

  • Las marcas vienen desordenadas

    10, [7, 2, 4] → 20

Además de estas, el reto tiene pruebas ocultas que se revelan al enviar tu solución.

Empiezas con esto

Python

def costo_cortes(largo, marcas):
    pass

JavaScript

function costoCortes(largo, marcas) {
}
Resolver este reto

Se abre en el navegador, con el editor y las pruebas. Este reto es del plan completo; los de O(1) y O(log n) son gratis.

Más retos de O(2ⁿ)

Ver todos los retos →