解题思路:
1. 01背包问题
2. 背包容量为总额的一半
class Solution:
def maxPresent(self , presentVec ):
""" 01 背包 """
if len(presentVec) == 0:
return 0
sum_pre = sum(presentVec)
sum_vec = int(sum_pre // 2) + 1 # 背包的容量
# 初始化
dp = [0 for i in range(sum_vec)]
# 动态转移方程 dp[i][j] = dp[i-1][j-presentVec[i]] + arr[i]
for i in range(len(presentVec)):
for j in range(sum_vec - 1, presentVec[i] - 1, -1):
dp[j] = max(dp[j], dp[j - presentVec[i]] + presentVec[i])
return int(abs(sum_pre - 2 * dp[-1]))


京公网安备 11010502036488号