[LeetCode] 343. Separación de enteros (C ++)


Fuente del tema: https://leetcode-cn.com/problems/integer-break

Descripción del Título

Dado un número entero positivo n, divídalo en la suma de al menos dos enteros positivos y maximice el producto de estos números enteros. Devuelve el producto más grande que pueda obtener.

Ejemplo 1:

Entrada: 2
Salida: 1
Explicación: 2 = 1 + 1, 1 × 1 = 1.
Ejemplo 2:

Entrada: 10
Salida: 36
Explicación: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36.
Explicación: puede suponer que n no es menor que 2 ni mayor que 58.

Idea general

  • Problemas clásicos de programación dinámica
  • Cinco pasos de programación dinámica:
    • Determine el significado de la matriz dp y los subíndices: dp [i] representa el valor máximo del producto de i
    • 确定 递推 公式 :
      dp [i] = {max (j ∗ (i - j), j ∗ dp [i - j]) dp [i] = \ left \ {\ begin {array} {c} max (j * (ij), j * dp [ij]) \ end {matriz} \ right.d p [ i ]={ m a x ( j( yo-j ) ,jd p [ i-j ] )
  • seguir adelante
    • Cómo definir e inicializar la matriz dp
      • Cuando dp [0] y dp [1] son ​​0, son inseparables cuando n son estos dos números.
    • Determinar el orden transversal
      • i se puede atravesar directamente desde el subíndice 2 (i∈ [2, n]), j se atraviesa de 1 a i, j∈ [1, i)
    • Ejemplo para derivar una matriz dp

Inserte la descripción de la imagen aquí

Programación dinámica

  • A través del recorrido de j, cuando actualizamos continuamente n = i, obtenemos el valor máximo del producto después de obtener todos los métodos de división, y luego lo actualizamos a dp [i], y finalmente damos salida a dp [n]
class Solution {
    
    
public:
    int integerBreak(int n) {
    
    
        vector<int> dp(n + 1, 0);
        for(int i = 2 ; i <= n; ++i){
    
    
            int maxCount = 0;
            for(int j = 1 ; j < i ; ++j){
    
    
                maxCount = max(maxCount, max(j * (i - j), j * dp[i - j]));
            }
            dp[i] = maxCount;
        }
        return dp[n];
    }
};

Análisis de complejidad

  • Complejidad del tiempo: O (n ^ 2). n es la longitud de la matriz
  • Complejidad espacial: O (n). n es la longitud de la matriz

Supongo que te gusta

Origin blog.csdn.net/lr_shadow/article/details/115003687
Recomendado
Clasificación