蒻蒟请大佬教题目
  • 板块学术版
  • 楼主wangkelin123
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/8/6 07:44
  • 上次更新2024/8/6 09:47:11
查看原帖
蒻蒟请大佬教题目
947042
wangkelin123楼主2024/8/6 07:44

题目描述 给定若干个正整数 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 分解答。

2024/8/6 07:44
加载中...