Pregunta diaria de Blue Bridge Cup (6): Revitalizar China (pitón)

Tema:

Xiao Ming participó en el divertido encuentro deportivo de la escuela, y uno de los eventos fue: cuadrícula de salto.
Dibuja algunas cuadrículas en el suelo y escribe una palabra en cada cuadrícula, como se muestra a continuación: (ver también p1.jpg)
Comenzando por mí, comenzando por mí, comenzando
por revitalizar,
comenzando por revitalizar,
comenzando por revitalizar, revitalizar China

Durante el juego, primero párate en la cuadrícula con la palabra "desde" en la esquina superior izquierda. Puedes saltar a la cuadrícula adyacente horizontal o verticalmente, pero no a la cuadrícula diagonal u otras posiciones. Salte siempre al final de la palabra "华".
La ruta solicitada para ser saltada simplemente constituye la frase "comenzando por mí para revitalizar China".
Por favor, ayude a Xiao Ming a calcular cuántas rutas de salto posibles tiene en total.
p1

Análisis:

El tema aparentemente complicado es en realidad que solo hay dos opciones para cada cuadrícula hacia la derecha o hacia abajo,
y se puede acceder a cada cuadrícula desde la cuadrícula superior o la cuadrícula izquierda.

Solución_1:

Programación dinámica
Primero cree una matriz con cuatro filas y cinco columnas.
Solo hay una ruta que comienza desde "desde".
Entonces, después de configurar los datos [0] [0] = 1
para la primera fila, la única forma
de llegar desde la izquierda es para la primera columna. Solo hay una forma
de llegar desde arriba. Para otras celosías, se puede llegar desde la celosía superior o la
celosía izquierda . El número de rutas a cualquier celosía se obtiene sumando el número de rutas a la celosía superior celosía y el número de rutas a la celosía izquierda para obtener la
ecuación de transferencia resumida como datos [i] [j] + = datos [i-1] [j] + datos [i] [j-1]
Finalmente, el número total de caminos que regresan directamente a la última cuadrícula es el resultado

Puede expresarse como una tabla:

1 1 1 1 1
1 2 3 4 5
1 3 6 10 15
1 4 10 20 35

Código_1:

import numpy as np
data = np.zeros((4, 5))
data[0][0] = 1

for i in range(0, 4):
    for j in range(0, 5):
        data[i][j] += data[i - 1][j] + data[i][j - 1]

print(data[3][4])

Solución_2:
Dado que la programación dinámica se puede usar para resolver este problema, la recursividad también se puede usar para resolver este problema. La
idea es similar. La
condición de referencia es recursiva al principio. 1 El
método de cálculo es el mismo que la ecuación de transición de programación dinámica .

Código_2:

def ans(a, b):
    if a == 0 or b == 0:
        return 1
    else:
        return ans(a - 1, b) + ans(a, b - 1)


res = ans(3, 4)
print(res)

Respuesta:
35

Supongo que te gusta

Origin blog.csdn.net/weixin_50791900/article/details/112546938
Recomendado
Clasificación