Vamos a demostrar esto con un ejemplo:
alturas [] = {2, 7, 3, 8, 5}
Ordenar el conjunto de alturas en orden descendente.
alturas [] = [8, 7, 5, 3, 2]
Mantenga otra matriz que almacene la suma de esta y todos los elementos anteriores (DP)
dp [] = [8, 15, 20, 23, 25]
Ahora aplique la búsqueda binaria en un rango de línea real (0, max_height). No necesita almacenar esta matriz solo una búsqueda binaria que se encuentra en el medio simplemente agregando elementos de límite / 2.
Esto le dará un pivote donde buscará si puede cortar en este punto, digamos pivote
Ahora aplique nuevamente la búsqueda binaria en la matriz de alturas [] para cada pivote y encuentre una posición tal que todos los elementos posteriores sean menores o iguales que el pivote.
Digamos que tiene una posición y en la matriz, ahora
dp [y] – pivote * (y + 1) Esta es la cantidad de madera que tiene cortando en el punto de pivote. Ahora, si es mayor que x, entonces su nueva región para búsqueda binaria es (pivote, 8) de lo contrario vaya a (0, pivote – 1).
- Quiero una pasantía relacionada con la informática este verano. ¿Cómo debo prepararme ahora?
- ¿Cómo podría contactar a una empresa de tecnología de EE. UU. Para realizar prácticas de verano mientras estoy estudiando en Cambridge, Reino Unido?
- Usted es pasante en un fondo de cobertura y tiene una reunión con el CEO. ¿Qué preguntas?
- ¿Cómo es tomar un descanso de la escuela para hacer una pasantía?
- ¿Dónde puedo obtener una pasantía como estudiante de ECE?
¡¡Espero que esto ayude!! ¡Solo una memoria con dos búsquedas binarias!
Complejidad: (n log n + log (max_height) * log (n))