【18】Programación dinámica DP

pensar:

La programación dinámica consiste en convertir la solución óptima para un problema grande en la solución óptima para múltiples problemas pequeños (por lo que se debe considerar la solución óptima para cada problema). Los siguientes son los pasos específicos de resolución de problemas de la programación dinámica: (1) Definir cada
problema una pequeña pregunta

(Por ejemplo, dp[i] es el número máximo de caminos que se pueden tomar cuando hay n pasos)
(2) Encuentre la relación de recurrencia (generalmente dp[i]=dp[i-1]+dp[i-2 ])

(3) Inicialización

(El primer dp[0], normalmente hay dos dp[0], dp[1])

(4) Utilice (2) para calcular las soluciones óptimas para todos los problemas.

(5) dp[n] es la solución óptima al gran problema original

tema

Esto es muy similar a los números de Fibonacci ([i]=[i-1]+[i-2])

Pasos específicos para la resolución de problemas:
(1) Defina cada pequeño problema: dp[i] es el número máximo de caminos a seguir cuando hay n pasos
(2) Encuentre la relación de recurrencia: dp[i]=dp[i-1] +dp[ i-2])

(3) Inicialización

dp[0]=1--------------------Solo hay 1 tipo cuando hay 0 pasos

dp[1]=1--------------------Solo hay 1 tipo para 1 paso

(4) Utilice (2) para calcular las soluciones óptimas para todos los problemas.

Por ejemplo: dp[2]=dp[1]+dp[0]----------Cuando hay 2 pasos, hay 1+1 formas de moverse (1+1, 0+1)

(5) dp[n] es la solución óptima al gran problema original

para i=0;i<=n;i++{

        dp[n]=dp[n-1]+dp[n-2]

}

dp[n]=dp[n-1]+dp[n-2]= dp[n-2]+dp[n-3] + dp[n-3]+dp[n-4]

= dp[n-3]+dp[n-4] +2( dp[n-4]+dp[n-5] ) + dp[n-5]+dp[n-6]

=dp[n-3]+3dp[n-4] + 3 dp[n-5] ) +dp[n-6]

//?.?

código

func climbStairs(n int) int {
	if n <= 1 {
		return 1 // 如果楼梯只有0阶或1阶,只有一种方法
	}

	dp := make([]int, n+1) // 创建一个数组来存储每个阶梯的方法数
	dp[0] = 1              // 初始状态:0阶楼梯只有1种方法(不爬)
	dp[1] = 1              // 初始状态:1阶楼梯只有1种方法(爬1步)

	for i := 2; i <= n; i++ {
		// 每次可以选择爬1阶或2阶,所以方法数等于前两阶之和
		dp[i] = dp[i-1] + dp[i-2]
	}

	return dp[n] // 返回n阶楼顶的方法数
}

Supongo que te gusta

Origin blog.csdn.net/weixin_67225910/article/details/132599472
Recomendado
Clasificación