título Descripción
Usted da una cadena de longitud n, por favor cortar la longitud del segmento de cuerda número entero m (m, n son números enteros, n> 1 y m> 1), la longitud de cada cuerda se conoce como k [0], k [1], ..., k [m]. Se k [0] xk [1] x ... xk [m] máximo posible del producto es ¿cuánto? Por ejemplo, cuando la longitud de la cuerda es 08:00, lo cortamos en longitudes de tres secciones 2,3,3 del producto obtenido en este momento es el máximo 18.
pensamiento
Cuenta con cuatro dinámica programación resolución de problemas:
① la solución óptima de un problema,
la solución óptima al problema general ② depende de la solución sub-óptima respectiva;
entre los problemas ③ hay poca superposición de los más pequeños sub-problema;
④ hacia abajo a partir del análisis del problema, para resolver el problema de la parte inferior hacia arriba;
Específica a esta pregunta, cuando el número <4, la máxima de corte no se corta, cuando el número> 4, no debe ser un punto de consideración de la cuerda se divide en dos, el valor máximo de cada producto derivado de composición de dos dividido todo el producto de la cuerda máxima. ¿Por qué no va a la cuerda se divide en 3 partes, 4 partes, debido a que estas soluciones son de hecho cubiertos por las 2 partes por dentro.
código
class Solution {
public:
int cutRope(int number) {
if(number < 1)
return 0;
vector<int> res(number+1);
if(number==2)
return 1;
if(number==3)
return 2;
res[1] = 1;
res[2] = 2;
res[3] = 3;
int tmp = 0;
for(int i =4 ; i <=number ; i++)
{
for(int j = 1; j <= i/2;j++)
{
tmp = max(tmp, res[j]*res[i-j]);
}
res[i] = tmp;
}
return res[number];
}
};