思路:先對陣列排好序,然後利用雙指標進行處理,假如兩個負數的乘積大於等於兩個正數的乘積,那麼取負數的乘積,因為後面可能還要用到正數的值;否則就取數值最大的數。詳見**。
題目:
資源限制
時間限制:1.0s 記憶體限制:512.0mb
問題描述
對於n個數,從中取出m個數,如何取使得這m個數的乘積最大呢?
輸入格式
第一行乙個數表示資料組數
每組輸入資料共2行:
第1行給出總共的數字的個數n和要取的數的個數m,1
<=n<=m<=
15, 第2行依次給出這n個數,其中每個數字的範圍滿足:a[i]的絕對值小於等於4。
輸出格式
每組資料輸出1行,為最大的乘積。
樣例輸入15
5123
42樣例輸出
48
**:
def
fun(m,nums)
: nums.sort(
)# 從小到大排序 有負數的話,負數在左邊
# 在m=1的情況下,直接返回最大值即可
if m ==1:
return nums[-1
] s =
1 start =
0 end =
len(nums)-1
while start <
len(nums)-2
and end >
0and m >0:
# 兩個負數的乘積大於等於兩個正數的乘積
if nums[start]
* nums[start+1]
>= nums[end]
* nums[end-1]
and m >=2:
s *= nums[start]
* nums[start+1]
start +=
2 m -=
2# 否則取數值最大的數
else
: s *= nums[end]
end -=
1 m -=
1return s
if __name__ ==
"__main__"
: n =
int(
input()
)# 陣列的個數
藍橋杯 演算法提高 最大乘積
演算法提高 最大乘積 時間限制 1.0s 記憶體限制 512.0mb 問題描述 對於n個數,從中取出m個數,如何取使得這m個數的乘積最大呢?輸入格式 第一行乙個數表示資料組數 每組輸入資料共2行 第1行給出總共的數字的個數n和要取的數的個數m,1 n m 15,第2行依次給出這n個數,其中每個數字的...
藍橋杯 演算法提高 最大乘積
問題描述 對於n個數,從中取出m個數,如何取使得這m個數的乘積最大呢?輸入格式 第一行乙個數表示資料組數 每組輸入資料共2行 第1行給出總共的數字的個數n和要取的數的個數m,1 n m 15,第2行依次給出這n個數,其中每個數字的範圍滿足 a i 的絕對值小於等於4。輸出格式 每組資料輸出1行,為最...
藍橋杯演算法提高 最大乘積
問題描述 對於n個數,從中取出m個數,如何取使得這m個數的乘積最大呢?輸入格式 第一行乙個數表示資料組數 每組輸入資料共2行 第1行給出總共的數字的個數n和要取的數的個數m,1 n m 15,第2行依次給出這n個數,其中每個數字的範圍滿足 a i 的絕對值小於等於4。輸出格式 每組資料輸出1行,為最...