問題説明
タイトルNデジタル与え、非常に簡単であり、最終結果はできるだけ大きくされ、K個の乗算とNK-1プラス記号の添加の途中には、それらの相対位置を変更(プラス何括弧)ありません。乗算とプラスは、N-1の合計であるため、その正確ごとに隣接する二つの数字の間の符号を持っています。例えば:
N = 5、K = 2,5番号それぞれ1,2,3,4,5、添加することができる:
1 2(3 + 4 + 5)24 =
1(2 + 3)(4 + 5 )45 =
(1 2 + 3)*(4 + 5)= 45
...... *
入力形式の
入力ファイルが2つの行を合計、最初の二つは、整数は、スペースで区切られた作用、及びN(2 <= Kを表しN <= 15、0 <= K <= N-1)。スペースで区切られたN個の2行目(0〜9の間の各数値)。
出力形式の
出力ファイルのみ1つの行が必要な最大の結果を示す整数含有する
サンプル入力を
5 2
1 2 5 4 3
サンプル出力
120
例説明
(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]);
}
}