欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

B. Maximum Product(贪心+枚举)

程序员文章站 2022-07-03 17:23:03
https://codeforces.com/contest/1406/problem/B思路:直接正反两个排序,枚举正排序中选0~5个,反排序中选5-i个,枚举取最大就好了。注意:longlong和最小值开大,-0x3f3f3f3f不够。#include#include#include#include#include#include

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

相关标签: 思维 贪心