Backpack III
https://www.lintcode.com/problem/backpack-iii/description
# no repetition
dp[i][j] = max(dp[i][j],dp[i-1][j-A[i-1]] + V[i-1])
#with repetition
dp[i][j] = max(dp[i][j],dp[i][j-A[i-1]] + V[i-1])class Solution:
"""
@param A: an integer array
@param V: an integer array
@param m: An integer
@return: an array
"""
def backPackIII(self, A, V, m):
# write your code here
n = len(A)
if n == 0:
return 0
dp = [(m+1)*[0] for _ in range(n+1)]
for i in range(n+1):
for j in range(m+1):
dp[i][j] = dp[i-1][j]
if j >= A[i-1]:
dp[i][j] = max(dp[i][j],dp[i][j-A[i-1]] + V[i-1])
res = 0
for j in range(1,m+1):
res = max(res,dp[n][j])
return resLast updated