時間限制: 1 sec 記憶體限制: 128 mb
提交: 292 解決: 39
[提交][狀態][討論版][命題人:acm4302]
對於n個數,從中取出m個數,如何取使得這m個數的乘積最大呢?
第一行乙個數 代表資料組數
每組資料共兩行
第一行兩個正整數n、m, n,m<=20
第二行給出n個整數,其中每個數的絕對值小於4
每組資料輸出1行,為最大的乘積
15 51 2 3 4 2
48[提交][狀態]
分析:看到題的第一思路,建立兩個陣列a和b,正數存在a中,負數存在b中。
正數陣列降序排列,負數陣列公升序排列。
當m>=2時,判斷負數陣列前兩項乘積和正數陣列前兩項乘積的大小,選擇大的。
m=1時單獨考慮,選擇當前沒被選擇的最大正數即可,其實這個地方就已經暴露問題了。
若是當前剩餘的沒有正數了,那所得的答案乘以乙個負數,不可能是最大的了.......
重新思考,經過幾次實驗,問題最大的一組測試資料為1
5 3 -9 -8 -7 -4 -5
也就是輸入全為負數且需要取奇數個的時候,那麼特殊的優先考慮即可。
最後發現其實用乙個陣列存資料排序即可。
ac**:
#include#include#includeusing namespace std;
#define maxx 100
int a[maxx];
int flag;//標記是否存在正數
int cmp(int a,int b)
int main() else
}} else
cout<} return 0;
}
DFS BFS 最大乘積
今年是國際數學聯盟確定的 2000 世界數學年 又恰逢我國著名數學家華羅庚先生誕辰90周年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的乙個好朋友xz也有幸得以參加。活動中,主持人給所有參加活動的選手出了這樣一道題目 設有乙個長度n的數字串,要求選手使用k個乘號將它分成k...
WinterEx 最大乘積
時間限制 1 sec 記憶體限制 128 mb 乙個正整數一般可以分為幾個互不相同的自然數的和,如3 1 2,4 1 3,5 1 4 2 3,6 1 5 2 4,現在你的任務是將指定的正整數n分解成若干個互不相同的自然數的和,且使這些自然數的乘積最大。只乙個正整數n,3 n 10000 第一行是分解...
最大乘積問題
題目描述 輸入n個元素組成的序列s,找出乙個乘積最大的連續子串行,輸出最大乘積的值。如果這個最大乘積不是正數,輸出0。n小於18,每個元素值的絕對值不大於10。輸入先輸入n的值,再依次輸入n個數的序列,遇到檔案末尾結束。輸出在一行輸出最大乘積的值。樣例輸入 52 5 1 2 1 樣例輸出 20當看到...