問題描述
對於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個數,其中每個數字的...