揹包型動態規劃 揹包問題6

2021-10-18 23:02:40 字數 1289 閱讀 4261

給出乙個都是正整數的陣列nums,其中沒有重複的數。從中找出所有的和為target的組合個數。

示例:

輸入: nums = [1, 2, 4] 和 target = 4

輸出: 6

解釋:可能的所有組合有:

[1, 1, 1, 1]

[1, 1, 2]

[1, 2, 1]

[2, 1, 1]

[2, 2]

[4]

和揹包問題5唯一的區別是:組合中數字可以按照不同的順序組合

最後一步:最後乙個物品重量是多少

• 如果最後乙個物品重量是a0 , 則要求有多少種組合能拼成target – a0

• 如果最後乙個物品重量是a1 , 則要求有多少種組合能拼成target – a1

• 如果最後乙個物品重量是an-1, 則要求有多少種組合能拼成target – an-1

因此我們可以假設f[i]表示有多少種組合能拼出重量i

假設f[i]表示有多少種組合能拼出重量i

f[0]=1:表示有1種組合能拼出重量0

如果i從小到大計算,結果為f[target]

時間複雜度: o(n*target),空間複雜度:o(target)

class

solution

:"""

@param nums: an integer array and all positive numbers, no duplicates

@param target: an integer

@return: an integer

"""defbackpackvi

(self, nums, target)

:# write your code here

if target==0or

len(nums)==0

:return

0 dp=[0

]*(target+1)

dp[0]

=1for i in

range(1

,target+1)

:for j in nums:

if i>=j:

dp[i]

+=dp[i-j]

return dp[target]

揹包型動態規劃 揹包問題1

在n個物品中挑選若干物品裝入揹包,最多能裝多滿?假設揹包的大小為m,每個物品的大小為a i 示例 樣例 1 輸入 3,4,8,5 backpack size 10 輸出 9 樣例 2 輸入 2,3,5,7 backpack size 12 輸出 12 首先要明確一點,在揹包問題中,陣列大小和總稱重有...

揹包型動態規劃 揹包問題3

給定n種物品,每種物品都有無限個.第i個物品的體積為a i 價值為v i 再給定乙個容量為m的揹包.問可以裝入揹包的最大價值是多少?樣例 1 輸入 a 2,3,5,7 v 1,5,2,4 m 10 輸出 15 解釋 裝入三個物品 1 a 1 3,v 1 5 總價值 15.樣例 2 輸入 a 1,2,...

動態規劃揹包問題 01揹包

問題描述 n種物品,每種乙個。第i種物品的體積為vi,重量為wi。選一些物品裝到容量為c的揹包,使得揹包內物品不超過c的前提下,重量最大。問題分析 宣告乙個f n c 的陣列。f i j 表示把前i件物品都裝到容量為j的揹包所獲得的最大重量。當 j v i 時,揹包容量不足以放下第 i 件物品,f ...