题目描述 给定若干个正整数 a 1 a 1 , a 2 a 2 ... a n a n ,在它们之间允许添加加号、乘号、括号,求结果的最大值。请你编程帮助藤藤完成这个任务。
输入格式 第一行为正整数 n,
第二行为 n 个正整数 a i ,均不超过30。
输出格式 输出最大值。
输入输出样例
输入 #1复制
3 1 2 3
输出 #1复制
9
输入 #2复制
8 1 1 1 1 1 1 1 1
输出 #2复制
18
说明/提示 对于 50% 的数据, n ≤ 16 , a i ≤ 10 n≤16,a i ≤10。
对于 100% 的数据, 1 ≤ n ≤ 60 , a i ≤ 30 1≤n≤60,a i ≤30。
这题我的老师说要写 dp 加高精度,可我不知如何写高精度,有会的可以帮我写写吗?谢谢。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,a[105],f[105][105];
int main(){
// freopen("exp.in","r",stdin);
// freopen("exp.out","w",stdout);
cin>>n;
//memset(f,0xc0,sizeof(f));
for(int i=1;i<=n;i++){
cin>>a[i];
f[i][i]=a[i];
}
for(int len=2;len<=n;len++){
for(int l=1;l+len-1<=n;l++){
ll r=l+len-1;
for(int k=l+1;k<=r;k++)
f[l][r]=max(f[l][r],max(f[l][k-1]+f[k][r],f[l][k-1]*f[k][r]));
}
}
cout<<f[1][n];
return 0;
}
这是没有高精度的 50 分解答。