título Descrição
É dar uma cadeia de comprimento n, por favor, cortar o comprimento do segmento de corda inteiro m (m, n são números inteiros, n> 1 e m> 1), o comprimento de cada corda é referido como K [0], k [1], ..., k [m]. Será k [0] xk [1] x ... xk [m] produto máxima possível é quanto? Por exemplo, quando o comprimento da corda é 08:00, nós cortá-la em comprimentos de três secções 2,3,3 do produto obtido neste momento é o máximo 18.
pensamento
Características quatro dinâmica de programação resolução de problemas:
① a solução óptima de um problema;
solução óptima para o problema geral ② é dependente da solução sub-óptima respectivo;
entre os problemas ③ existe uma pequena sobreposição da menor sub-problema;
④ para baixo a partir da análise do problema, para resolver o problema do-se inferior;
Específico para esta questão, quando o número <4, a corte máxima não é cortada, quando o número> 4, deve haver um ponto de consideração da corda é dividido em dois, o valor máximo de cada produto derivado de dois composição dividida o produto inteiro da corda máxima. Por que não vai a corda é dividido em 3 partes, 4 partes, porque essas soluções são efectivamente abrangidos pelas 2 partes 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];
}
};