562 揹包問題 IV

2022-02-14 21:23:28 字數 1387 閱讀 6329

中文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

class

solution:

"""@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 問 應該如何選擇裝入揹包的物品,使得裝入揹包中的物品的總價值最大?分析一波,面對每個物品,我們只有選擇拿取或者不拿兩種選擇,不能選擇裝入某物品的一部分,也不能裝入同一物品多次。解決辦法 宣告乙個 大...