Este artículo es de https://leetcode.com/discuss/general-discussion/458695/Dynamic-Programming-Patterns, este internauta extranjero, soy responsable de la localización
Tabla de contenido
1. El problema de tipo de ruta mínimo (máximo) para alcanzar la meta
Problema de DP de cuatro cuerdas
En cuarto lugar, plantee problemas de toma de decisiones.
1. El problema de tipo de ruta mínimo (máximo) para alcanzar la meta
La descripción de este tipo de problema es: Dada una meta, encuentre el costo mínimo (máximo) (costo) / ruta (ruta) / suma (suma) para alcanzar la meta.
El código de plantilla general es:
for i in range(1,target+1):
for j in range(len(ways)):# ways:达到目标的方法个数
if ways[i]<=i:
dp[i] = min(dp[i], dp[i - ways[j]] + 代价(cost) / 路径(path) / 总和(sum))
return dp[target]
Preguntas similares son:
- Sube escaleras con un costo mínimo
- Suma de ruta mínima
- Cambio de intercambio
- Suma mínima de trayectoria de descenso
- Precio más bajo
De dos formas diferentes
La descripción de este tipo de problema es: dado un objetivo, encontrar diferentes formas de alcanzar el objetivo
El código de plantilla general es:
for i in range(1,target):
for j in range(len(ways)):
if ways[j]<=i:
dp += dp[i-ways[j]]
return dp[target]
Preguntas similares son:
También hay preguntas que indican el número de repeticiones, en este caso agregue un bucle para simular cada repetición.
- Probabilidad de caballero en tablero de ajedrez
- Suma objetivo
- Suma de combinación IV
- Marcador de caballero
- Simulación de tirada de dados
- Partición igual subconjunto suma
- Porciones de sopa
- Azulejos Domino y Tromino
- Intercambios mínimos para aumentar las secuencias
- Número de subsecuencia creciente más larga
- Caminos únicos II
- Caminos fuera de los límites
- Número de formas de permanecer en el mismo lugar después de algunos pasos
- Contar la permutación de vocales
3. Intervalo de consolidación
La descripción de este tipo de problema es: Dado un conjunto de números para obtener el mejor valor, puede encontrar la solución al problema a partir del número actual y el número a la izquierda o derecha del mismo.
El código de plantilla general es:
for l in range(1,n):
for i in range(n-l):
j = i+l
for k in range(i,j):
dp[i][j] = max(dp[i][j], dp[i][k] + result[k] + dp[k+1][j])
return dp[0][n-1]
Preguntas similares son:
- Árbol de costo mínimo a partir de valores de hoja
- Árboles de búsqueda binarios únicos
- Triangulación de puntuación mínima del polígono
- Eliminar cajas
- Costo mínimo para fusionar piedras
- Estallido de globos
- Adivina el número más alto o más bajo II
Problema de DP de cuatro cuerdas
La descripción de este tipo de problema es: Dadas dos cadenas s1 y s2, devuelve algunos resultados
El código de plantilla general es:
/**
i : 字符串s1的下标
j : 字符串s2的下标
**/
for i in range(1,n+1):
for j in range(1,m+1):
if s1[i-1] == s2[j-1]:
dp[i][j] = #code....#
else:
dp[i][j] = #code....#
Si te das una cadena, el método es casi el mismo:
for l in range(1,n):
for i in range(n-l):
j = i+l
if s[i] == s[j]:
dp[i][j] = /*code*/
else:
dp[i][j] = /*code*/
Preguntas similares son:
- Subsecuencia común más larga
- Subcadenas palindrómicas
- Subsecuencia palindrómica más larga
- Supersecuencia común más corta
- Editar distancia
- Subsecuencias distintas
- Suma de eliminación mínima ASCII para dos cadenas
- Subcadena palindrómica más larga
En cuarto lugar, plantee problemas de toma de decisiones.
Descripción del problema: dado un conjunto de valores, encuentre la respuesta y brinde la opción de elegir o ignorar el valor actual
Código de plantilla genérico:
#i: 一组值的下标
#j: 忽略j值的选项
for i in range(1,n):
for j in range(1,k+1):
dp[i][j] = max(dp[i][j], dp[i-1][j] + arr[i], dp[i-1][j-1])
dp[i][j-1] = max(dp[i][j-1], dp[i-1][j-1] + arr[i], arr[i])
Preguntas similares son:
- Ladrón de casa
- Mejor momento para comprar y vender acciones
- Mejor momento para comprar y vender acciones con tarifa de transacción
- Mejor momento para comprar y vender acciones con enfriamiento
- Mejor momento para comprar y vender acciones III
- Mejor momento para comprar y vender acciones IV
De hecho, muchos problemas pueden resolverse sin programación dinámica A continuación, se incluye un resumen de las soluciones a problemas similares.