藍橋杯 ADV 15演算法提高 最大乘積

2021-07-15 10:17:25 字數 722 閱讀 7809

問題描述

對於n個數,從中取出m個數,如何取使得這m個數的乘積最大呢?

輸入格式

第一行乙個數表示資料組數

每組輸入資料共2行:

第1行給出總共的數字的個數n和要取的數的個數m,1<=n<=m<=15,

第2行依次給出這n個數,其中每個數字的範圍滿足:a[i]的絕對值小於等於4。

輸出格式

每組資料輸出1行,為最大的乘積。

樣例輸入

15 5

1 2 3 4 2

樣例輸出

48分析:負數要想選擇,必須兩個兩個的選擇。正數只需要乙個乙個選擇就好~所以把陣列按照從小到大排序,這樣負數就在最左邊,正數就在最右邊啦~當還可以選擇兩個或者兩個以上數字的時候~比較兩個左邊的數字相乘會不會比右邊的數字相乘的結果大~如果大的話,那就選左邊那兩個負數~如果只能選擇乙個數字了,或者左邊兩個數的乘積不比右邊兩個數的乘積大~那麼就選擇最右邊那個最大數字就好~相乘得到結果~~

#include #include using namespace std;

int main()

sort(a, a+n);

int p = 0, q = n - 1;

while(p <= n-1 && q >= 0 && m > 0) else

}cout << ans << endl;

}return 0;

}

藍橋杯 ADV 15 演算法提高 最大乘積

演算法提高 最大乘積 時間限制 1.0s 記憶體限制 512.0mb 問題描述 對於n個數,從中取出m個數,如何取使得這m個數的乘積最大呢?輸入格式 第一行乙個數表示資料組數 每組輸入資料共2行 第1行給出總共的數字的個數n和要取的數的個數m,1 n m 15,第2行依次給出這n個數,其中每個數字的...

藍橋杯 ADV 15 最大乘積

演算法提高 最大乘積 時間限制 1.0s 記憶體限制 512.0mb 問題描述 對於n個數,從中取出m個數,如何取使得這m個數的乘積最大呢?輸入格式 第一行乙個數表示資料組數 每組輸入資料共2行 第1行給出總共的數字的個數n和要取的數的個數m,1 n m 15,第2行依次給出這n個數,其中每個數字的...

1501181723 藍橋杯 演算法提高 最大乘積

演算法提高 最大乘積 時間限制 1.0s 記憶體限制 512.0mb 問題描述 對於n個數,從中取出m個數,如何取使得這m個數的乘積最大呢?輸入格式 第一行乙個數表示資料組數 每組輸入資料共2行 第1行給出總共的數字的個數n和要取的數的個數m,1 n m 15,第2行依次給出這n個數,其中每個數字的...