中文english
給出 n 個物品, 以及乙個陣列,nums[i]
代表第i個物品的大小, 保證大小均為正數並且沒有重複, 正整數target
表示揹包的大小, 找到能填滿揹包的方案數。
每乙個物品可以使用無數次
樣例1
輸入: nums = [2,3,6,7] 和 target = 7
輸出: 2
解釋:方案有:
[7][2, 2, 3]
樣例2
輸入: nums = [2,3,4,5] 和 target = 7
輸出: 3
解釋:方案有:
[2, 5]
[3, 4]
[2, 2, 3]
輸入測試資料 (每行乙個引數)如何理解測試資料?
版本:動態規劃 揹包型別dp
classsolution:
"""@param nums: an integer array and all positive numbers, no duplicates
@param target: an integer
@return: an integer
"""def backpackiv(self, nums, target):
# write your code here
#計算個數
length =len(nums)
dp = [[0
for _ in range(target + 1)] for _ in range(length + 1
)]
#如果target為0的話,則個數為1
for i in range(length + 1
): dp[i][
0] = 1
#計算順序
for i in range(1, length + 1
):
for j in range(1, target + 1
): #不確定有多少次
count = 0
while count*nums[i - 1] <=j:
#如果是j - nums[i - 1]*count 沒有找到的話,說明是不存在的,則加的是0,否則加的是當前
#組成該數的個數是多少,比如4,存在2,4兩個物品,則有兩種可能
dp[i][j] += dp[i - 1][j - nums[i - 1]*count]
count += 1
return dp[length][target]
UVA 562 DP入門之01揹包
題意 有一堆硬幣,如何平分,可以讓兩堆硬幣的價值之差最小 剛開始想貪心的,姿勢不對,直接wa 將硬幣總和sum求出來,將sum 2當做容器就好,搜尋sum 2 0 符合條件的 列舉出所有的可能性之和。然後最後就是 差值 q sum 2 最大值 如下 include include include i...
揹包問題 01揹包問題
n個物品,總體積是v,每個物品的體積的vi,每個物品的最大價值是wi,在不超過v的體積下求最大價值 eg揹包容積為 5 物品數量為 4 物品的體積分別為 物品的價值分別為 思路定義乙個二位陣列int f new int n 1 v 1 f i j 就表示在1 i個物品中選取體積小於v的情況的最大價值...
01揹包問題 完全揹包問題 多重揹包問題
0 1 揹包問題 給定 n 種物品和乙個容量為 c 的揹包,物品 i 的重量是 wi,其價值為 vi 問 應該如何選擇裝入揹包的物品,使得裝入揹包中的物品的總價值最大?分析一波,面對每個物品,我們只有選擇拿取或者不拿兩種選擇,不能選擇裝入某物品的一部分,也不能裝入同一物品多次。解決辦法 宣告乙個 大...