試題 演算法提高 最大乘積 python

2021-10-05 09:39:10 字數 1574 閱讀 5594

思路:先對陣列排好序,然後利用雙指標進行處理,假如兩個負數的乘積大於等於兩個正數的乘積,那麼取負數的乘積,因為後面可能還要用到正數的值;否則就取數值最大的數。詳見**。

題目:

資源限制

時間限制: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行,為最...