rutas-modificadas-contando-en-un-rectángulo

Estaba resolviendo el siguiente problema. Pero no puedo pensar en un algoritmo eficiente para esta versión modificada del problema. El enunciado del problema es:

Nos dan K Rectángulos . Las dimensiones del x-ésimo Rectángulo son (Nx * Mx), donde 1<=x<=K. De cada rectángulo x, Alice corta un rect. de dimensión (Px*Qx), donde 1<=x<=K, desde la esquina superior derecha y desecha la parte cortada.

Inicialmente, Alice colocó un robot en la esquina superior izquierda de cada rectángulo. Él está muy interesado en encontrar la cantidad de formas en que cada robot puede llegar a la esquina inferior derecha (objetivo) usando las siguientes reglas:

  • El robot solo puede moverse 1 unidad hacia la derecha o el robot solo puede moverse 1 unidad hacia abajo .
  • El robot no puede moverse hacia arriba, ni siquiera puede moverse hacia la izquierda y no puede moverse ni siquiera en diagonal .
  • El robot puede moverse en el límite del rectángulo.

El número de formas puede ser muy grande. Por lo tanto, Respuesta = (Número de formas) mod 10^9+7.

Las restricciones son muy grandes:

1<=K<=10
2<=(Nx,Mx)<=5*10^5
1<=Px<Nx
1<=Qx<Mx

El límite de tiempo es de solo 1 segundo.

Ejemplo:

K=1

N1=2 M1=2

P1=1 Q1=1

Respuesta: 5 formas

Resolví la versión más fácil de este problema (Usando el triángulo de Pascal + Combinatorics), cuando no se corta/elimina ninguna parte del rectángulo. Pero no sé cómo resolver el problema modificado anterior, donde se corta un pequeño rectángulo desde la esquina superior derecha del rectángulo original.

Respuestas (3)

Restrinjamos el estudio solo a uno de los K rectángulos. Supongamos que N y M son respectivamente su alto y ancho, y que P y Q son el alto y el ancho del rectángulo que se corta. Vamos a referirnos a un sistema de coordenadas con origen en la esquina superior izquierda del rectángulo y los ejes x e y orientados hacia la derecha y hacia abajo respectivamente.

El número de caminos posibles desde la esquina superior izquierda hasta la esquina inferior derecha viene dado por:

( norte + METRO ) ! norte ! METRO !

Del número anterior debemos restar el número de caminos que no pasan por el rectángulo eliminado. Estos son todos los caminos que no tienen un punto en el segmento vertical (M-Q+1, 0) - (M-Q+1, P-1).

El número de caminos que pasan por un punto específico (x, y) viene dado por:

( X + y ) ! X ! y ! [ ( METRO + norte ) ( X + y ) ] ! ( METRO X ) ! ( norte y ) !

Por lo tanto, el número que buscamos es:

( norte + METRO ) ! norte ! METRO ! y = 0 PAG 1 ( METRO q + 1 + y ) ! ( METRO q + 1 ) ! y ! ( norte + q 1 y ) ! ( q 1 ) ! ( norte y ) !

Sin embargo, no sabría cómo poner esa suma en forma cerrada.

¡Estás restando cada camino a través del rectángulo eliminado muchas veces! (Tantas veces como puntos eliminados pase.)
TonyK, tienes razón, ahora he corregido mi publicación original.
La restricción es muy grande :2<=(Nx,Mx)<=5*10^5 . ¿Podemos convertir la ecuación anterior en combinatoria? El Factorial de 10^5 es difícil de manejar debido al desbordamiento
Maths123, ¿a qué te refieres con convertir en combinatoria? Una forma en la que puedo pensar para evitar el desbordamiento al multiplicar números grandes es usar logaritmos. De todos modos, creo que este tema sería mejor que se discutiera en un tema diferente.
Necesita usar programación dinámica, este problema es muy "forma de desbordamiento". Entonces, con esta fórmula, ¿por qué no usas la memorización?

(Voy a desechar tu X subíndice, y considere un solo caso dado por ( norte , METRO , PAG , q ) . yo suelo X como mi X -coordinar.)

Dejar H Sea el segmento de línea horizontal de ( 0 , METRO q ) a ( norte PAG , METRO q ) que extiende el límite inferior del rectángulo recortado a lo largo de la parte sin cortar. Considere un punto ( X , y ) en H . Dejar tu ( X , y ) sea ​​el número de caminos desde la esquina superior izquierda ( 0 , METRO ) a ( X , y ) ese primer encuentro H en ( X , y ) ; y deja L ( X , y ) Sea el número de caminos desde ( X , y ) a la esquina inferior derecha ( norte , 0 ) . Entonces el número de caminos desde ( 0 , METRO ) a ( norte , 0 ) ese primer encuentro H en ( X , y ) es solo tu ( X , y ) L ( X , y ) , y obtenemos el total al sumar esto X de 0 a norte PAG .

Ahora deja R ( i , j ) Sea el número de caminos desde una esquina de un i × j rectángulo a la esquina opuesta:

R ( i , j ) = ( i + j ) ! i ! j !
(como tú sabes). Recibimos de inmediato L ( X , y ) = R ( norte X , METRO q ) . Y para tu ( X , y ) , tenga en cuenta que un camino que primero se encuentra H en ( X , y ) debe pasar ( X , y + 1 ) , entonces tu ( X , y ) es solo R ( X , q 1 ) .

Partimos de la cuadrícula de esquina común (B, NA) del rectángulo y la parte cortada. Ahora, comenzamos desde la cuadrícula (0,0) y encontramos el camino hasta esa esquina multiplicado por los caminos desde esa esquina hasta la cuadrícula (N+1,M+1), es decir, el primer término de la expresión anterior. Ahora, retrocedemos una cuadrícula y calculamos la ruta desde la cuadrícula (0,0) hasta esa cuadrícula multiplicada por las rutas desde allí hasta la cuadrícula (N+1,M+1), pero eliminando los casos en los que se usa la cuadrícula común. De manera similar, siguiendo el proceso anterior hasta la cuadrícula (B,NA-1) a (B,0) obtenemos el resultado.

Por lo tanto, puede usar la fórmula que he derivado:

( norte A + B B ) ( METRO B + A A ) + r = 0 norte A 1 ( B + r r ) ( norte r + METRO B 1 norte r )

dónde A = PAG y B = q .

Necesita simplificarlo aún más para convertirlo en O ( norte registro norte ) solución.