Descripción del problema
título es muy simple, dado N digital, no cambian sus posiciones relativas, en el medio de la multiplicación K y la adición de NK-1 del signo +, (más cualquier paréntesis) el resultado final es tan grande como sea posible. Debido a que la multiplicación y PLUS es un total de la N-1, de modo exactamente entre cada dos números adyacentes tener una señal. Por ejemplo:
N = 5, K = 2,5 números 1,2,3,4,5 respectivamente, pueden ser una adición:
. 1 2 (3 + 4 + 5) = 24
1. (2 + 3) (4 + 5 ) 45 =
(1 2 + 3) * (4 + 5) = 45
...... *
formato de entrada
archivos de entrada total dos líneas, los dos primeros actos enteros separados por un espacio, y N representa K, donde (2 <= N <= 15, 0 <= K <= N-1). La segunda línea de los N números separados por espacios (cada número entre 0 a 9).
Formato de salida
de archivo de salida sólo una fila contiene un número entero que indica un resultado de la máxima requerida
de entrada de muestra
. 5 2
. 1 2. 5. 4. 3
Salida de muestra
120
Ejemplo Descripción
(1 + 2 + 3) = 120 * 4 * 5
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int a[]=new int[120];
long sum[]=new long[120];
long f[][]=new long[120][120];
int n,K;
sum[0]=0;
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
K=sc.nextInt();
for(int i=1;i<=n;i++){
a[i]=sc.nextInt();
sum[i]=sum[i-1]+a[i];
}
for(int i=1;i<=n;i++)
f[i][0]=sum[i];
for(int i=0;i<=n;i++){
int t = Math.min(i - 1, K);
for(int j=1;j<=t;j++){
for(int k=2;k<=i;k++){
long s=sum[i]-sum[k-1];
f[i][j]=Math.max(f[k-1][j-1]*s, f[i][j]);
}
}
}
System.out.println(f[n][K]);
}
}