class Solution:
def lastStoneWeightII(self, stones: List[int]) -> int:
#根据题意最大3000
mid = sum(stones) // 2
#dp[i]表示,容量为i的最大价值,即容量为i的石头重量
#核心思路:要将石头尽可能分为两堆重量大小相同的,即求sum//2容量的最大价值,再将两堆相减
dp = [0] * (mid+1)
#先遍历物品(石头)
for i in range(len(stones)):
#再遍历背包
#mid遍历到stones[i]-1,遍历到容量为stones[i]
for j in range(mid,stones[i]-1,-1):
dp[j] = max(dp[j],dp[j-stones[i]]+stones[i])
return sum(stones) - 2*dp[mid]
1049. 最后一块石头的重量 II
最新推荐文章于 2024-06-14 09:50:01 发布