2019vivo秋招提前批筆試題第3題

2022-08-24 23:12:13 字數 1570 閱讀 5364

筆試的時候沒做出來,就順手截圖了。

雖然知道要用動態規劃做,但我一直就不太懂動態規劃。筆試完又花了2小時把它做出來了。也不知道效能怎麼樣,但還好做出來了。

def solution(n, toltal_money, until_price, until_hot):

# 二維陣列,每一行代表0到total_money每乙個數對應的解(解是乙個陣列,第0列是最高熱度值,後面分別是湊成此熱度的因子)

# 因為不允許重複採購同乙個商品,所以需要標識一下湊成此熱度值時已經購買的商品,方便後面的解用到時檢視那些商品是已經購買了的。

price_hot = [[0 for a in range(n+1)] for k in range(toltal_money + 1)]

for i in range(toltal_money + 1):

j = 0

# 臨時陣列,儲存的是二維陣列的每一行的值(0到total_money的某些數值的解可能會有多個解法,

# 但我們需要找出熱度值最高的哪乙個,所以這裡需要臨時儲存一下,在確定了最高熱度值得時候再把這個解複製到二維陣列中去)

temp = [0 for i in range(n+1)]

# 構造最優解

while j < n:

if (i - until_price[j]) >= 0:

# 判斷是否重複買了商品,需要將上乙個最高熱度值得因子組成複製下來。

for x in range(1, n+1):

temp[x] = price_hot[i - until_price[j]][x]

# 如果新購買的這個商品沒有在上乙個解裡被標示,則可以構成乙個解

if temp[j+1] == 0:

last = price_hot[i - until_price[j]][0] + until_hot[j]

# 找出最優解

if temp[0] < last:

temp[0] = last

# 標識已購買得商品,這裡我把商品得熱度填進去做了標識,這樣就可以在陣列中直接看出最高熱度的組成因子

# 當然把商品加個填進去做標識,甚至直接把它標為1也可以。

temp[j+1] = until_hot[j]

# 將臨時存放得最優解放到二維陣列裡

for x in range(n + 1):

price_hot[i][x] = temp[x]

j += 1

return price_hot[total_money][0]

n = 6

total_money = 1000

until_price = [200, 600, 100, 180, 300, 450]

until_hot = [6, 10, 3, 4, 5, 8]

print("total_money=1000時的解:", solution(n, total_money, until_price, until_hot))

2019VIVO提前批筆試記錄

一方面用於自己記錄,一方面給小夥伴們乙個參考 如有錯誤,懇請指正 題目描述 1.給定兩個整形陣列,求差集 需要補全的函式傳入的引數是兩個陣列及對應的陣列長度 思考 經典題目,衍生出求並集,交集,以下給出兩種思路,並分別分析複雜度 思路一 將array1分為三段 建議做的時候畫圖 分別為 已經比較過的...

2023年vivo提前批開發崗筆試

筆試共三道大題,不是很難,但是編譯器爛的要死,還不讓用本地編譯器。第一道題 輸入陣列a和陣列b,刪除陣列a中b中存在的元素!輸入描述 a b 輸出描述 class solution if flag false array1 k array1 i for int i 0 i k i cout arra...

2023年vivo提前批開發崗筆試

筆試共三道大題,不是很難,但是編譯器爛的要死,還不讓用本地編譯器。第一道題 輸入陣列a和陣列b,刪除陣列a中b中存在的元素!輸入描述 a b 輸出描述 class solution if flag false array1 k array1 i for int i 0 i k i cout arra...