揹包問題
在n個物品中挑選若干物品裝入揹包,最多能裝多滿?假設揹包的大小爲m,每個物品的大小爲A[i]
如果有4個物品[2, 3, 5, 7]
如果揹包的大小爲11,可以選擇[2, 3, 5]裝入揹包,最多可以裝滿10的空間。
如果揹包的大小爲12,可以選擇[2, 3, 7]裝入揹包,最多可以裝滿12的空間。
函數需要返回最多能裝滿的空間大小。
Python二維動態規劃版本:
class Solution:
"""
@param m: An integer m denotes the size of a backpack
@param A: Given n items with size A[i]
@return: The maximum size
"""
def backPack(self, m, A):
# write your code here
n = len(A)
f = [[False] * (m + 1) for _ in range(n + 1)]
f[0][0] = True
for i in range(1, n + 1):
f[i][0] = True
for j in range(1, m + 1):
if j >= A[i - 1]:
f[i][j] = f[i - 1][j] or f[i - 1][j - A[i - 1]]
else:
f[i][j] = f[i - 1][j]
for i in range(m, -1, -1):
if f[n][i]:
return i
return 0