题目
问题描述
对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢?
输入格式
第一行一个数表示数据组数
每组输入数据共2行:
第1行给出总共的数字的个数n和要取的数的个数m,1<=n<=m<=15,
第2行依次给出这n个数,其中每个数字的范围满足:a[i]的绝对值小于等于4。
输出格式
每组数据输出1行,为最大的乘积。
样例输入
1
5 5
1 2 3 4 2
样例输出
48
思路:
有小伙伴用揹包做,可是蓝桥刷多了就习惯暴力了嘛~
代码
import java.util.*;
import java.math.*;
import java.util.regex.*;
public class Main {
final static int INF = 0x3f3f3f3f;
final static int NUM = 100;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T=sc.nextInt();
int n,m;
int ans;
while(T--!=0) {
n=sc.nextInt();m=sc.nextInt();
int[] a=new int[n];
for(int i=0;i<n;i++)a[i]=sc.nextInt();
Arrays.sort(a);
if(m==1){System.out.println(a[a.length-1]);continue;}
ans=1;
for(int i=a.length-1,j=0;i>0&&j<a.length-1;) {
if(m<=0)break;
if(a[i]*a[i-1]>a[j]*a[j+1]) {
ans*=a[i];i--;
m--;
}
else {
if(m>=2) {
ans*=a[j]*a[j+1];j+=2;
m-=2;
}
else {
ans*=a[i];i++;
m--;
}
}
}
System.out.println(ans);
}
}
}