給出乙個都是正整數的陣列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 ...