蓝桥题目的风格和acm差异很大啊,感觉acm需要的是纯粹的算法,蓝桥算法考的没有这么难但是对编程能力的要求也不低。所以做的时候感觉怪怪的
这道题注意要用long long,然后5层循环要是放在acm里面应该是比较少见的吧
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define MAX 20
using namespace std;
long long s[MAX],dp[MAX][MAX][MAX];
int n,k;
void init(){
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>s[i];
memset(dp,-1,sizeof(dp));
for(int i=1;i<=n;i++)
dp[i][i][0]=s[i];
}
void solve(){
for(int l=2;l<=n;l++){//changdu
for(int i=1;i+l-1<=n;i++){
int front=i,rear=i+l-1;
for(int j=0;j<l&&j<=k;j++){//chengfa geshu
for(int t=front;t<rear;t++){//zhongjiandian
for(int x=0;x<=t-front&&x<=j;x++){
if(dp[front][t][x]!=-1&&dp[t+1][rear][j-x]!=-1)
dp[front][rear][j]=max(dp[front][rear][j],dp[front][t][x]+dp[t+1][rear][j-x]);
}
for(int x=0;x<=t-front&&x<=j-1;x++){
if(dp[front][t][x]!=-1&&dp[t+1][rear][j-x-1]!=-1)
dp[front][rear][j]=max(dp[front][rear][j],dp[front][t][x]*dp[t+1][rear][j-x-1]);
}
}
}
}
}
cout<<dp[1][n][k]<<endl;
}
int main(){
init();
solve();
return 0;
}