YTU OJ 最大乘積

2021-08-28 00:19:05 字數 907 閱讀 2473

時間限制: 1 sec  記憶體限制: 128 mb

提交: 292  解決: 39

[提交][狀態][討論版][命題人:acm4302]

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

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

每組資料共兩行

第一行兩個正整數n、m, n,m<=20

第二行給出n個整數,其中每個數的絕對值小於4

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

1

5 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當看到...