题目描述
给一个长度为�n的序列��an,一开始你有一个数�=0A=0,每次可以从序列中选一个数�b,令�=�+�A=A+b或者�=�×�A=A×b,每个数都要使用一次,加的次数要和乘的次数近可能相近,要求最大化�A,输出�A对998244353998244353取模的值
输入描述
第一行为一个整数�n,表示序列的长度。
第二行为�n个整数��ai,描述这个序列。2≤�≤103,1<��≤1092≤n≤103,1<ai≤109
输出描述
一个非负整数,表示�A的最大值对998244353998244353取模的值。
样例输入
43 3 2 4
样例输出
60
提示
(2+3)×3×4=60(2+3)×3×4=60
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll mod=998244353;
int main(){
ll n,a[2005],sum=0,ans;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n);
for(int i=1;i<=n/2;i++){
sum=(sum+a[i])%mod;
}
ans=sum;
for(int i=n/2+1;i<=n;i++){
ans=ans*a[i]%mod;
}
cout<<ans;
return 0;
}

被折叠的 条评论
为什么被折叠?



