Description
对于
n
个数,从中取出
m
个数,如何取使得这
m
个数的乘积最大呢?
Input
第一行一个数
T
表示数据组数。
每组输入数据共
2
行:
第
1
行有
2
个整数
n
、
m
,
1<=m<=n<=15
,第
2
行有
n
个整数,其中每个数的绝对值小于等于
4
。
Output
对每组数据,输出
1
行,为最大的乘积值。
Sample Input
15 51 2 3 4 2
Sample Output
48
向伦神学习简洁的代码!
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
//thanks to pyf ...
#define INF 0x3f3f3f3f
int a[30];
int Max = -INF;
int n,k;
void dfs(int i,int sum,int step)
{
if(i>=n)
{
if(step==k)
Max = max(Max,sum);
return;
}
dfs(i+1,sum,step);
dfs(i+1,sum*a[i],step+1);
}
int main()
{
int T;
cin >> T;
while(T--)
{
Max = -INF;
cin >> n >> k;
for(int i=0;i<n;i++)
cin >> a[i];
dfs(0,1,0);
cout << Max << endl;
}
}