título Descripción
Usted da una cadena de longitud n, por favor, longitud de corte de números enteros de segmentos de cuerda m (m, n es un número entero, n> 1 y m> 1), la longitud de cada cuerda se denota 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
Pensando: tanto como sea posible y luego se corta la longitud de la cuerda 3 2 construyeron una pequeña nota que si se deja, a continuación, construido 4 2 2 * 3 * 1 que bien
público clase Solution { público int cutRope ( int objetivo) { si (objetivo <= 1) volver 0 ; si (objetivo == 2) de regreso 1 ; si (objetivo == 3) de regreso 2 ; int x = target / 3 ; int y = destino% 3 ; si (y == 1 ) { retorno 4 * ( int ) Math.pow (3, x-1 ); } Demás si (y == 2 ) { volver 2 * ( int ) Math.pow (3 , x); } Más { retorno ( int ) Math.pow (3 , x); } } }
La programación dinámica puede ser también
La longitud de las dos mitades es igual al producto actual de la longitud máxima de cada uno de los dos medio-producto de la máxima - "subestructura óptima y subproblemas superpuestos
público clase Solution { público int cutRope ( int objetivo) { si (objetivo <= 1) volver 0 ; si (objetivo == 2) de regreso 1 ; si (objetivo == 3) de regreso 2 ; int [] proyecto = nuevo int [target + 1 ]; proyecto [ 0] = 0 ; proyecto [ 1] = 1 ; proyecto [ 2] = 2 ; proyecto [ 3] = 3 ; para (int i = 4; i <= objetivo; i ++ ) { int max = 0 ; para ( int j = 1; j <= i / 2; j ++ ) { max = Math.max (max, proyecto [j] * proyecto [i- j]); } Proyecto [i] = max; } Devolver proyecto [objetivo]; } }