蓝桥杯--算法提高 最大乘积(DFS)

来源:互联网 发布:小丸压制软件 编辑:程序博客网 时间:2024/06/07 00:53
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;    }}
0 0
原创粉丝点击