蓝桥杯 最大的算式(dp)

#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]); 
}
发布了10 篇原创文章 · 获赞 1 · 访问量 174

猜你喜欢

转载自blog.csdn.net/weixin_43626356/article/details/105109469