当前位置: 移动技术网 > 移动技术>移动开发>IOS > B. Maximum Product(贪心+枚举)

B. Maximum Product(贪心+枚举)

2020年09月01日  | 移动技术网移动技术  | 我要评论
https://codeforces.com/contest/1406/problem/B思路:直接正反两个排序,枚举正排序中选0~5个,反排序中选5-i个,枚举取最大就好了。注意:longlong和最小值开大,-0x3f3f3f3f不够。#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<m

https://codeforces.com/contest/1406/problem/B


思路:直接正反两个排序,枚举正排序中选0~5个,反排序中选5-i个,枚举取最大就好了。

注意:longlong和最小值开大,-0x3f3f3f3f不够。

#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<cstdio>
#include<algorithm>
#define debug(a) cout<<#a<<"="<<a<<endl;
using namespace std;
const int maxn=1e5+100;
typedef long long LL;
LL a[maxn],b[maxn];
bool cmp(LL a,LL b)
{
	return a>b;
}
int main(void)
{
  cin.tie(0);std::ios::sync_with_stdio(false);
  LL t;cin>>t;
  while(t--){
  	LL n;cin>>n;
  	for(LL i=0;i<=n+10;i++) a[i]=b[i]=0;
  	for(LL i=1;i<=n;i++) {
  		cin>>a[i];b[i]=a[i];
	}
	sort(a+1,a+1+n);//小到大
	sort(b+1,b+1+n,cmp);//大到小
	LL ans=-1e18;
	for(LL i=0;i<=5;i++){//拿0,1,2,3,4,5个 
		LL j=5-i;LL sum=1;
		for(LL k=1;k<=i;k++){
			sum*=a[k];
		}
		for(LL k=1;k<=j;k++){
			sum*=b[k];
		}
		ans=max(ans,sum);
	} 
	cout<<ans<<endl;
  }
return 0;
}

 

本文地址:https://blog.csdn.net/zstuyyyyccccbbbb/article/details/108558779

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网