Ganha a oferta de corte a corda

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];
    }
};
Publicado 85 artigos originais · ganhou elogios 0 · Visualizações 388

Acho que você gosta

Origin blog.csdn.net/weixin_38312163/article/details/104888963
Recomendado
Clasificación