题意:
给你一排数,有正有负,问你从中选择5个数,使得这五个数乘积最大,输出这个最大值。
题解:
先排序再枚举~
一个正数和4个负数,2个正数和三个负数,等等。
#include <bits/stdc++.h>
#define pb push_back
#define ll long long
using namespace std;
int main()
{
int T;
cin >> T;
while(T--)
{
int n;
cin >> n;
int flag = 0;
vector<int>z,f;
for(int i=1;i<=n;i++)
{
int x;
cin >> x;
if(x >= 0)z.pb(x),flag = 1;
else f.pb(x);
}
sort(z.begin(),z.end());
sort(f.begin(),f.end());
ll ans = 1;
if(flag == 0) {
int cnt = 0;
for(int i=f.size()-1;i>=0;i--) {
ans *= f[i];
if(++cnt == 5)break;
}
}
else {
ans = -1e18;
ll pre = 1,cnt = 0;
for(int i = (int)z.size()-1;i >= 0; i--) {
pre *= z[i];
cnt++;
ll sum = pre;
if(f.size() >= 5-cnt) {
for(int j=0;j<5-cnt;j++) {
sum *= f[j];
}
ans = max(ans,sum);
}
if(cnt == 5)break;
}
}
cout<<ans<<'\n';
}
return 0;
}