📅  最后修改于: 2023-12-03 15:11:39.091000             🧑  作者: Mango
给定一个整数数组,求出其所有可能的子集和值,并找出包含数字区间 [0, K] 的 K 的最大值。
可以使用动态规划来解决此问题。
定义一个二维数组 dp,其中 dp[i][j] 表示是否可以利用前 i 个元素组成和等于 j。则对于当前的一个元素 nums[i],其有两种情况:
动态规划的边界条件为 dp[0][0] = true。因为没有元素时和为 0。
最后找到 dp[n][k] 为 true 的最大 k 值即可。
def max_subset_sum(nums: List[int], K: int) -> int:
n = len(nums)
dp = [[False]*(K+1) for _ in range(n+1)]
dp[0][0] = True
res = 0
for i in range(1, n+1):
for j in range(K+1):
dp[i][j] = dp[i-1][j]
if j >= nums[i-1]:
dp[i][j] |= dp[i-1][j-nums[i-1]]
if dp[i][j]:
res = max(res, j)
return res
代码片段已按markdown标明。