-
Problem
-
对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢?
-
Solution
-
数据规模不大,直接DFS穷举每一种组合,计算最大乘积。
# include <iostream>
# include <cstdio>
# include <cstring>
using namespace std;
const int maxn = 20;
int n, m;
int a[maxn], b[maxn], used[maxn];
int ans;
void dfs(int pos)
{
if(pos == m){
int product = 1;
for(int i = 0; i < m; ++i){
product *= b[i];
}
if(ans < product)
ans = product;
return;
}
for(int i = 0; i < n; ++i)
{
if(!used[i])
{
b[pos] = a[i];
used[i] = true;
dfs(pos + 1);
used[i] = false;
}
}
}
int main()
{
//freopen("data.in", "r", stdin);
int test;
cin >> test;
while(test--)
{
cin >> n >> m;
ans = -0xFFFF;
memset(b, 0, sizeof(b));
memset(used, 0, sizeof(used));
for(int i = 0; i < n; ++i)
cin >> a[i];
dfs(0);
cout << ans << endl;
}
}