#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll dp[20][20]; //dp[i][j]前i个数字用了j个*
ll sum[20]; //保存前缀和 避免多次计算
int main(){
int n,k;
scanf("%d%d",&n,&k);
for(int i=1,x;i<=n;i++){
scanf("%d",&x);
sum[i] = sum[i-1]+x;
dp[i][0] = sum[i]; //边界
}
for(int i=1;i<=n;i++){
for(int j=1;j<=min(k,i-1);j++){
for(int l=1;l<=i;l++){ //枚举新增的乘号位置
dp[i][j] = max(dp[i][j],dp[l-1][j-1]*(sum[i]-sum[l-1]));
}
}
}
printf("%lld\n",dp[n][k]);
}
蓝桥杯 最大的算式(dp)
猜你喜欢
转载自blog.csdn.net/weixin_43626356/article/details/105109469
今日推荐
周排行