Solicitud
- Dado un número positivo n, puede dividirlo en la suma de múltiples números y encontrar el método de división que maximice el producto de estos números (al menos dividido en dos números)
Ejemplos
- n = 2, devuelve 1 (2 = 1 + 1)
- n = 10, devuelve 36 (10 = 3 + 3 + 4)
Lograr
- Recorrido hacia atrás (n ^ 2, tiempo de espera)
1 clase Solución { 2 privado : 3 int max3 ( int a, int b, int c) { 4 return max (a, max (b, c)); 5 } 6 7 // divide n (al menos dos partes) El producto máximo que se puede obtener es 8 int breakInteger ( int n) { 9 10 if (n == 1 ) 11 return 1 ; 12 13 int res = -1 ; 14 for ( inti = 1 ; i <= n- 1 ; i ++ ) 15 // i + (ni) 16 res = max3 (res, i * (ni), i * breakInteger (n- i)); 17 18 return res; 19 } 20 21 public : 22 int integerBreak ( int n) { 23 return breakInteger (n); 24 } 25 };
- Búsqueda de memoria
Solución de 1 clase { 2 privado : 3 vector < int > memo; 4 5 int max3 ( int a, int b, int c) { 6 return max (a, max (b, c)); 7 } 8 9 // will n El producto máximo que se puede obtener dividiendo (al menos dos partes) 10 int breakInteger ( int n) { 11 12 if (n == 1 ) 13 return 1 ; 14 15 if(memo [n]! = - 1 ) 16 return memo [n]; 17 18 int res = - 1 ; 19 para ( int i = 1 ; i <= n- 1 ; i ++ ) 20 // i + (ni) 21 res = max3 (res, i * (ni), i * breakInteger (n- i)); 22 memo [n] = res; 23 devoluciones res; 24 } 25 26 público : 27 int integerBreak ( int n) { 28 memo = vector < int > (n + 1 , - 1 ); 29 return breakInteger (n); 30 } 31 };
- Programación dinámica
Solución de 1 clase { 2 privado : 3 int max3 ( int a, int b, int c) { 4 return max (a, max (b, c)); 5 } 6 7 público : 8 int integerBreak ( int n) { 9 afirmar (n> = 2 ); 10 11 // memo [i] significa el producto máximo obtenido dividiendo al menos el número i (al menos dos partes) 12 vector < int > memo (n + 1 , -1 ); 13 14 memo [ 1 ] = 1 ; 15 para ( int i = 2 ; i <= n; i ++ ) 16 // 求解 memo [j] 17 para ( int j = 1 ; j <= i- 1 ; j ++ ) 18 // j + ( ij) 19 memo [i] = max3 (j * (ij), j * memo [i- j], memo [i]); 20 21 memorando de regreso [n]; 22 } 23 };
Relacionados
- 279 cuadrados perfectos
- 91 formas de decodificación
- 62 caminos únicos
- 63 caminos únicos II