这个问题首先我们不能用暴力去做,那么我们就去分析一下这个题的规律,我首先把前八项乘开观察一下, A1×A3×A5×A7+A2×A3×A5×A7+A4×A5×A7+A6×A7+A8。我们拆开之后可以观察一下,发现每一项都乘以了奇数项,并且最后一个奇数项A7乘的最多次,那么我们就在想,是不是可以把A1-A7的奇数项进行正向排序,这样我们的可以保证最大值,这个地方可以用不等式证明,之后就是偶数项,每一项都有一个偶数项(第一项可以当作A0=1)那么我们会发现A2乘的数最大,那么我们就保证最大的永远大就行了,可以让偶数项序列倒序排列,那根据价值,我们把8个数中最大的4个分别放在A1 A3 A5 A7中,剩下四个放在偶数项中,然后计算一遍即可。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1e9+7;
ll a[100005];
ll b[100005];
ll c[100005];
bool cmp(ll a,ll b)
{
    return a>b;
}
int main()
{
    int n;
    cin>>n;
    ll res=1;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    sort(a+1,a+1+n);
    int k=n/2;
    for(int i=1;i<=k;i++)
    {
        b[i]=a[i];
    }
    for(int i=k+1;i<=n;i++)
    {
        c[i-k]=a[i];
    }
    sort(b+1,b+k+1,cmp);
    int cnt1=1,cnt2=1;
    for(int i=1;i<=n;i++)
    {
        if(i%2)
        {
            res*=c[cnt1++]%mod;
            res%=mod;
        }
        else
        {
            res+=b[cnt2++]%mod;
            res%=mod;
        }
    }
    cout<<res;
}