¿Qué es un algoritmo de programación dinámica que podría resolver el problema a continuación?

Para que el número de casas sea lo más mínimo posible, se debe compartir el número máximo de casas entre los puntos.

Pero si la distancia entre dos puntos es mayor que 2K, entonces no pueden compartir la misma casa.

Ahora para proceder con la solución:
Pensemos que solo hay un punto
Así que somos libres de elegir un punto en el rango de K, ya sea a la izquierda o a la derecha.
no de casa no puede ser inferior a 1.

Ahora si hay dos puntos.
O esos dos tendrán la casa más cercana individual o compartirán la casa en el mismo punto.
Ahora, mientras seleccionamos el punto de la casa para p [o], lo colocaremos a una distancia K tal que haya una posibilidad máxima de que se encuentre en la región de p [1].

Del mismo modo, podemos construir sobre esta idea.

Entonces el algoritmo es.

1. Ordenar todos los puntos.
2. inicializar housePoint = -infinity

3. para (i de 0 a n-1)
Compruebe si (p [i] – housePoint) <= k
si es verdad i ++
más
crear una nueva casa en housePoint = p [i] + k y aumentar houseCount

Una casa en el punto x cubrirá un círculo (xk a x + k).
Comience desde la izquierda
Pon una casa en p [i] + k.
Ignora los que cubre a la derecha
Repetir

Intenta resolverlo usando el algoritmo de mochila. Google sobre este algoritmo lo dominarás.
Puede intentar usar otros algoritmos como kruskals mínimo spanning tree y prims algortihm, etc.

Gracias por A2A.